Да, можеш. Има няколко начина.
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) (Зло)използвайте 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;