创建了一个函数。该函数有一个输入参数。我可以返回一列,但我想返回所有表列。另外我想做的是,如果结果为零,函数只返回 0。我该怎么做?
这里是错误结果。
错误:查询没有结果数据的目标
提示:如果您想放弃 SELECT 的结果,请使用 PERFORM。
上下文:PL/pgSQL 函数 dwgcould.returnallcolumns(charactervariable) 第 3 行 SQL 语句
********** 错误 **********
错误:查询没有结果数据的目标
SQL状态:42601
提示:如果您想放弃 SELECT 的结果,请使用 PERFORM。
上下文:SQL 语句中的 PL/pgSQL 函数 dwgcould.returnallcolumns(字符变化)第 3 行
CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying)
RETURNS SETOF public.mytable AS
$BODY$
BEGIN
SELECT * FROM public.mytable WHERE session_id=returnallcolumns.sessionId ORDER BY pro_id DESC LIMIT 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
如果你想返回结果,你需要使用return query
在 PL/pgSQL 中如手册中所述 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING
CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying)
RETURNS SETOF public.mytable AS
$BODY$
BEGIN
return query --<< this was missing
SELECT *
FROM public.mytable
WHERE session_id = returnallcolumns.sessionId
ORDER BY pro_id DESC LIMIT 1;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
但你不需要 PL/pgSQL 为此,一个简单的 SQL 函数会更有效:
CREATE OR REPLACE FUNCTION dwgcould.returnallcolumns(IN sessionId character varying)
RETURNS SETOF public.mytable AS
$BODY$
SELECT *
FROM public.mytable
WHERE session_id = returnallcolumns.sessionId
ORDER BY pro_id DESC LIMIT 1;
$BODY$
LANGUAGE sql;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)