Ja, du kannst. Es gibt mehrere Möglichkeiten.
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) Verwenden Sie ein OUT
oder 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;
Mehr im Handbuch hier.
3) (Ab)benutze IN
Parameter
Seit Postgres 9.0 Sie können auch Eingabeparameter verwenden als Variablen. Die Versionshinweise für 9.0:
Ein Eingabeparameter verhält sich jetzt wie eine lokale Variable, die mit dem übergebenen Wert initialisiert wird.
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;
Mit den letzten, die Sie benutzen eine Variable implizit, aber Sie müssen nicht DECLARE
es ausdrücklich (wie gewünscht).
4) Verwenden Sie einen DEFAULT
Wert mit einem INOUT
Parameter
Das ist ein kleiner Sonderfall. Der Funktionskörper kann leer sein.
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
ist eine Kurzschreibweise für INOUT _col1 integer DEFAULT 123
. Mehr:
- Der vergessene Zuweisungsoperator "=" und das Alltägliche ":="
5) Verwenden Sie stattdessen eine einfache SQL-Funktion
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;