创建一个功能。该函数有一个输入参数。我可以返回一列,但我想返回所有表列。另外我想做的是如果结果为零,则函数返回0.我怎么能这样做? 这里是错误结果。
错误:查询没有结果数据的目的地 提示:如果要放弃SELECT的结果,请改用PERFORM。 语法:PL / pgSQL函数dwgcould.returnallcolumns(字符变化)在SQL语句中的第3行 **********错误********** 错误:查询没有结果数据的目的地 SQL状态:42601 提示:如果要丢弃SELECT的结果,请改用PERFORM。 上下文:PL / pgSQL函数dwgcould.returnallcolumns(字符变化)SQL语句第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;
答案 0 :(得分:13)
如果要返回结果,则需要在PL / pgSQL中使用return query
as documented in the manual
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;