Имя значения, возвращаемого функцией PostgreSQL
Я работаю над кодом, который впервые обращается к серверу PostgreSQL (мой опыт работы с SQL Server), и мне нужна помощь, чтобы что-то выяснить.
Я всегда старался избегать "SELECT * ..." из кода, но я не могу понять, какова альтернатива при вызове функции. (К сожалению, все примеры, которые я нашел, делают "SELECT * ...")
Вот функция, которую я пытаюсь вызвать:
CREATE OR REPLACE FUNCTION aSchema.aFunction(var1 text, var2 accountidentifier, ...)
RETURNS int8
AS
$BODY$
DECLARE
retJobId BIGINT;
BEGIN
INSERT INTO aSchema.aTable (var1, var2, ...)
VALUES (var1, var2, ...)
RETURNING jobId INTO retJobId;
PERFORM aSchema.anotherFunction(retJobId, ...);
RETURN retJobId;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
я пробовал SELECT retJobId FROM aSchema.aFunction(...)
, но я получаю ERROR: column "retjobid" does not exist
, Замена "retJobId" на "*" работает, но, как я уже сказал, я бы хотел избежать этого.
2 ответа
Вы можете выбрать между:
select aschema.afunction() as my_name; -- like in IMSoP's answer
select my_name from aschema.afunction() as my_name; -- with alias
select afunction from aschema.afunction(); -- with function name
Если вы добавите aschema
для поиска пути вы можете опустить идентификатор схемы:
set search_path to public, aschema;
select afunction() as my_name;
select my_name from afunction() as my_name;
select afunction from afunction();
Поскольку функция возвращает скалярное значение (одно целое число), вам вообще не нужно выбирать FROM, просто выберите его как один столбец и присвойте ему псевдоним столбца, чтобы он был легко доступен в вызывающем коде:
SELECT aSchema.aFunction(...) AS retJobId;
Если это выглядит странно, учтите, что это то же самое, что выбрать математическое выражение, например:
SELECT 6 * 9 AS answer;
В Oracle вам понадобится предложение FROM, например FROM dual, но Postgres не требует этого.