首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PostgreSQL中的函数返回表类型

从PostgreSQL中的函数返回表类型
EN

Stack Overflow用户
提问于 2014-07-01 05:02:19
回答 1查看 3.4K关注 0票数 3

我有一个带有RETURNS TABLE的函数,我想从我的源表中返回某些列。当我执行这个函数时,它不会出现错误,但也不会返回任何行,尽管它应该返回。

我的功能怎么了?

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION ccdb.fn_email_details_auto()
  RETURNS TABLE (code integer, area smallint, action smallint
               , flag smallint, ucount  integer, view_cnt integer) AS
$BODY$
DECLARE 
   sec_col refcursor;
   cnt integer;
   sec_code ccdb.update_qtable%ROWTYPE;
BEGIN
   SELECT COUNT(DISTINCT section_code)  INTO cnt
   FROM ccdb.update_qtable
   WHERE entry_time::date = now()::date - interval '1 day';

   OPEN sec_col FOR
   SELECT * FROM ccdb.update_qtable
   WHERE entry_time::date = now()::date - interval '1 day';

   FOR i IN 1..cnt
   LOOP
      FETCH sec_col INTO sec_code;

      PERFORM section_code, ddu_area, ddu_action, status_flag
            , ccdb_ucount, ccdb_view_cnt
      FROM ccdb.update_qtable
      WHERE entry_time::date = now()::date - interval '1 day'
      AND section_code =  sec_code.section_code
      ORDER BY ddu_area, ddu_action;
   END LOOP;

   CLOSE sec_col;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE COST 100;
EN

回答 1

Stack Overflow用户

发布于 2014-07-01 06:45:39

通过对我使用的SELECT语句的返回查询,我能够解决这个问题。下面提到的查询帮助我实现了我的需求。

代码语言:javascript
复制
CREATE OR REPLACE FUNCTION ccdb.fn_email_details_auto()
  RETURNS TABLE (code integer, area smallint, action smallint, flag smallint, ucount integer, view_cnt integer) AS
$BODY$

DECLARE 
sec_col refcursor;
cnt integer;
sec_code ccdb.update_qtable%ROWTYPE;

BEGIN

SELECT COUNT(DISTINCT section_code)
INTO cnt
FROM ccdb.update_qtable
WHERE entry_time::date = now()::date - interval '1 day';

OPEN sec_col FOR
SELECT DISTINCT ON (section_code)* FROM ccdb.update_qtable WHERE entry_time::date = now()::date - interval '1 day';

FOR i IN 1..cnt
LOOP

FETCH sec_col INTO sec_code;

RETURN QUERY 
SELECT section_code, ddu_area, ddu_action, status_flag, ccdb_ucount, ccdb_view_cnt
FROM ccdb.update_qtable
WHERE entry_time::date = now()::date - interval '1 day' AND section_code = sec_code.section_code
ORDER BY ddu_area, ddu_action;

END LOOP;

CLOSE sec_col;

END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24502767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档