Postgresql存储过程返回表所有列

Fat*_*tih 5 postgresql

创建一个函数.该函数有一个输入参数.我可以返回一列,但我想返回所有表列.另外我想做的是如果结果为零,则函数返回0.我怎么能这样做?这里是错误结果.

错误:查询没有结果数据的目的地提示:如果要丢弃SELECT的结果,请改用PERFORM.语境:PL/pgSQL函数dwgcould.returnallcolumns(字符变化)SQL语句第3行**********错误**********错误:查询没有结果数据的目标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;
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 14

如果要返回结果,则需要在手册中记录的return query PL/pgSQL 中使用

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;
Run Code Online (Sandbox Code Playgroud)

但是你不需要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;
Run Code Online (Sandbox Code Playgroud)

  • @balron:你使用了“select * from returnallcolumns(...)”吗? (2认同)