Postgresql存储过程返回表所有列

时间:2017-03-03 12:38:17

标签: postgresql

创建一个功能。该函数有一个输入参数。我可以返回一列,但我想返回所有表列。另外我想做的是如果结果为零,则函数返回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;

1 个答案:

答案 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;