Имя значения, возвращаемого функцией 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 не требует этого.

Другие вопросы по тегам