postgresql 存储过程中返回表

Kru*_*dya 2 postgresql stored-procedures

我想用存储过程而不是函数返回整个表

我的代码是:

CREATE OR REPLACE PROCEDURE public.test()

RETURN TABLE (
     id   numeric
   , test varchar
   ) AS  -- Results  -- remove this
$func$

BEGIN
    RETURN QUERY
    SELECT * 
    FROM public.test

END
$func$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。

小智 9

存储过程并不意味着返回任何内容,而是使用函数。并且您也不需要 PL/pgSQL:

create or replace FUNCTION public.test()
  returns TABLE (id   numeric, test varchar) 
AS
$func$
  SELECT * 
  FROM public.test;
$func$ 
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

当您返回一个表的所有列时,您还可以使用returns setof

create or replace FUNCTION public.test()
  returns setof public.test
AS
$func$
  SELECT * 
  FROM public.test;
$func$ 
LANGUAGE sql;
Run Code Online (Sandbox Code Playgroud)

然后像表格一样使用它:

select *
from test();
Run Code Online (Sandbox Code Playgroud)

  • @Belayer:原因可能是“因为我们一直在 SQL Server 中这样做” (2认同)