从 PostgreSQL 函数返回的值的名称
name of value returned from PostgreSQL function
我正在编写一些代码,这是第一次与 PostgreSQL 服务器通信(我的经验是使用 SQL 服务器),我需要帮助解决问题。
我一直试图避免在代码中使用 "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" 是可行的,但是,就像我说的,我想避免这样做。
因为函数 returns 是一个标量值(单个整数),所以您根本不需要 select FROM 它,只需 select 它作为一个单独的列,并且给它一个列别名,以便在调用代码中轻松访问它:
SELECT aSchema.aFunction(...) AS retJobId;
如果这看起来很奇怪,请考虑它与 select 数学表达式相同,例如:
SELECT 6 * 9 AS answer;
在 Oracle 中,您需要一个 FROM 子句,例如 FROM dual,但 Postgres 不需要这个。
您可以选择:
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();
我正在编写一些代码,这是第一次与 PostgreSQL 服务器通信(我的经验是使用 SQL 服务器),我需要帮助解决问题。
我一直试图避免在代码中使用 "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" 是可行的,但是,就像我说的,我想避免这样做。
因为函数 returns 是一个标量值(单个整数),所以您根本不需要 select FROM 它,只需 select 它作为一个单独的列,并且给它一个列别名,以便在调用代码中轻松访问它:
SELECT aSchema.aFunction(...) AS retJobId;
如果这看起来很奇怪,请考虑它与 select 数学表达式相同,例如:
SELECT 6 * 9 AS answer;
在 Oracle 中,您需要一个 FROM 子句,例如 FROM dual,但 Postgres 不需要这个。
您可以选择:
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();