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

时间:2015-09-23 11:07:41

标签: postgresql function return procedure

我试图从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();

我也试过了。但是无法执行行。

       BEGIN;

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

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

2 个答案:

答案 0 :(得分:1)

不需要PL / pgSQL函数:

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

您还需要使用:

select * from prison();

要检索数据,请使用select prison()(仅返回单个记录,而不是多行)

如果您不希望返回所需的所有列,那么您没有向我们展示您对表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)以匹配您选择的列的数据类型。

答案 1 :(得分:0)

下面是一个示例代码。我假设了数据类型。用真实代码替换。

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;