lovejuan1314 发表于 2013-1-30 01:38:44

简单的Postgresql RETURN NEXT 应用

一个简单的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$DECLAREv_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 LOOPEXECUTE '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.
页: [1]
查看完整版本: 简单的Postgresql RETURN NEXT 应用