六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 393|回复: 0

简单的Postgresql RETURN NEXT 应用

[复制链接]

升级  46%

31

主题

31

主题

31

主题

秀才

Rank: 2

积分
119
 楼主| 发表于 2013-1-30 01:38:44 | 显示全部楼层 |阅读模式
一个简单的Postgresql的函数,只是简单的列出用户输入时间段的每一天,所以想试试用plsql函数来实现.. 这个要返回的是一个列表,就如select * from table一样,所以选择RETURN NEXT


// 先创建一个表CREATE TABLE dtList (dtvalue date);//创建一个函数,该函数返回一段时间内的天数CREATE OR REPLACE FUNCTION getDateList(IN startDt TIMESTAMP,IN endDt TIMESTAMP) RETURNS SETOF dtList AS$BODY$DECLARE  v_daysNo integer;  v_sql    varchar;  v_list   dtList%ROWTYPE;BEGIN    EXECUTE 'TRUNCATE TABLE dtList';SELECT (endDt::date - startDt::date) INTO v_daysNo;RAISE NOTICE 'The total number is,%',v_daysNo;--EXECUTE 'CREATE TABLE dtList (dtvalue date)';FOR i IN 0..v_daysNo LOOP  EXECUTE 'INSERT INTO dtList  '||' SELECT ('''||startDt||'''::date + '||i||' )';    END LOOP;        FOR v_list IN SELECT dtvalue FROM dtList    LOOP    RETURN NEXT v_list;    END LOOP;RETURN;END$BODY$LANGUAGE plpgsql;//执行一下看看结果吧select * from getDateList('2008-06-01','2008-06-30');// Result dtvalue------------------"2008-06-01""2008-06-02""2008-06-03""2008-06-04""2008-06-05""2008-06-06""2008-06-07""2008-06-08""2008-06-09""2008-06-10"

PS : 如果时间段很长的话,该函数的效率肯定底下,因为它只是简单的循环.当然,你可以用任何程序特别简单的来处理此类问题, 只是测试和运用postgres的RETURN NEXT.
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表