从PostgreSQL函数返回的值的名称

时间:2015-06-15 20:24:02

标签: postgresql plpgsql

我正在研究一些第一次与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 个答案:

答案 0 :(得分:2)

由于函数返回标量值(单个整数),您根本不需要选择FROM,只需将其选为单个列,并为其指定列别名,以便在调用代码中轻松访问:

SELECT aSchema.aFunction(...) AS retJobId;

如果这看起来很奇怪,请考虑它与选择数学表达式相同,例如:

SELECT 6 * 9 AS answer;

在Oracle中,您需要一个FROM子句,例如FROM dual,但Postgres不需要这样。

答案 1 :(得分: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();