select 语句中的 Postgres 存储过程无法获取数据

Postgres Stored procedure in select statement cannot get the datas

我正在尝试从 select prison(); 的数据库使用函数中获取数据。但是我遇到了错误。请告诉我。

 CREATE OR REPLACE FUNCTION prison() RETURNS refcursor AS $$
 DECLARE
    ref refcursor;
       BEGIN
          OPEN ref FOR SELECT  round,ben_sc,ben_st FROM prison_issue;

          RETURN ref;
       END;
$$ LANGUAGE plpgsql;

然后像这样打电话

     select prison();

我也tried.but无法执行这些行。

       BEGIN;

      SELECT prison();
      -- Returns: <unnamed portal 2>

      FETCH ALL IN "<unnamed portal 24>";
      COMMIT;

下面是一个例子code.I假设数据types.Replace是真实的。

CREATE OR REPLACE FUNCTION prison() RETURNS TABLE(round numeric,ben_sc character varying,ben_st character varying) AS $$

       BEGIN

          RETURN QUERY SELECT  p.round,p.ben_sc,p.ben_st FROM prison_issue p;

       END;
$$ LANGUAGE plpgsql;

不需要 PL/pgSQL 函数:

CREATE OR REPLACE FUNCTION prison() 
   RETURNS setof prison_issue 
AS $$
  SELECT * FROM prison_issue;
$$ LANGUAGE sql;

您还需要使用:

select * from prison();

要检索数据,请不要使用select prison()(它只有return一条记录,而不是多行)

如果您不想 return 所有列,您没有向我们展示您对 table prison_issue 的定义:

CREATE OR REPLACE FUNCTION prison() 
   RETURNS table (round integer, ben_sc text, ben_st text)
AS $$
  SELECT SELECT  round,ben_sc,ben_st FROM prison_issue;
$$ LANGUAGE sql;

您需要调整部分 table (round integer, ben_sc text, ben_st text) 以匹配您 select 的列的数据类型。