Ya kamu bisa. Ada beberapa cara.
1) RETURN (SELECT ...)
CREATE OR REPLACE FUNCTION get(_param_id integer)
RETURNS integer AS
$func$
BEGIN
RETURN (SELECT col1 FROM TABLE WHERE id = _param_id);
END
$func$ LANGUAGE plpgsql;
2) Gunakan OUT
atau INOUT
parameter
CREATE OR REPLACE FUNCTION get(_param_id integer, OUT _col1 integer)
-- RETURNS integer -- "RETURNS integer" is optional noise in this case
AS
$func$
BEGIN
SELECT INTO _col1 col1 FROM TABLE WHERE id = _param_id;
-- also valid, but discouraged:
-- _col1 := col1 FROM TABLE WHERE id = _param_id;
END
$func$ LANGUAGE plpgsql;
Selengkapnya di manual di sini.
3) (Ab)gunakan IN
parameter
Sejak Postgres 9.0 Anda juga dapat menggunakan parameter masukan sebagai variabel. Catatan rilis untuk 9.0:
Parameter input sekarang bertindak seperti variabel lokal yang diinisialisasi ke nilai yang diteruskan.
CREATE OR REPLACE FUNCTION get(_param_id integer)
RETURNS integer AS
$func$
BEGIN
SELECT INTO _param1 col1 FROM TABLE WHERE id = _param1;
RETURN _param1;
-- Also possible, but discouraged:
-- $1 := col1 FROM TABLE WHERE id = $1;
-- RETURN $1;
END
$func$ LANGUAGE plpgsql;
Dengan yang terakhir Anda gunakan variabel secara implisit, tetapi Anda tidak harus DECLARE
secara eksplisit (seperti yang diminta).
4) Gunakan DEFAULT
nilai dengan INOUT
parameter
Ini sedikit kasus khusus. Badan fungsi bisa kosong.
CREATE OR REPLACE FUNCTION get(_param_id integer, INOUT _col1 integer = 123)
RETURNS integer AS
$func$
BEGIN
-- You can assign some (other) value to _col1:
-- SELECT INTO _col1 col1 FROM TABLE WHERE id = _param_id;
-- If you don't, the DEFAULT 123 will be returned.
END
$func$ LANGUAGE plpgsql;
INOUT _col1 integer = 123
adalah notasi singkat untuk INOUT _col1 integer DEFAULT 123
. Selengkapnya:
- Operator tugas yang terlupakan "=" dan ":="
5) Gunakan fungsi SQL biasa sebagai gantinya
CREATE OR REPLACE FUNCTION get(_param_id integer)
RETURNS integer AS
$func$
SELECT col1 FROM TABLE WHERE id = _param_id;
-- use positional reference $1 instead of param name in Postgres 9.1 or older
$func$ LANGUAGE sql;