はい、できます。いくつかの方法があります。
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)OUT
を使用する またはINOUT
パラメータ
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;
詳細はこちらのマニュアルをご覧ください。
3)(Ab)IN
を使用 パラメータ
Postgres 9.0以降 入力パラメータを使用することもできます 変数として。 9.0のリリースノート:
入力パラメータは、渡された値に初期化されたローカル変数のように機能するようになりました。
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;
最後のもので使用します 暗黙的に変数ですが、DECLARE
する必要はありません 明示的に(要求に応じて)。
4)DEFAULT
を使用する INOUT
の値 パラメータ
これは少し特殊なケースです。関数本体は空にすることができます。
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
INOUT _col1 integer DEFAULT 123
の短い表記です 。詳細:
- 忘れられた代入演算子"="とありふれた":="
5)代わりにプレーンSQL関数を使用してください
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;