Archive

Posts Tagged ‘PLSQL’

PostgreSQL使用PL/SQL和游标实现按日期批量执行

March 26th, 2019 No comments

现有的DWH系统的是按天创建数据表的,使得定期维护变得麻烦,例如每个月底需要将按当月产生的临时表archive。

方式1.批量生成SQL,按固定的日期值生成一堆SQL,SQL生成方法多样。但是需要确认全部sql是否正确。

方式2.编写PL/SQL function,使用游标方式批量执行。

DROP FUNCTION fun_datecursor(from_date text,to_date text,cond text);
CREATE OR REPLACE FUNCTION fun_datecursor(from_date text,to_date text,cond text) RETURNS text
AS $ 
DECLARE
    cur_date refcursor;
    buffer text := '';
    var_day DATE;
BEGIN
OPEN cur_date FOR EXECUTE 'SELECT generate_series('''|| from_date ||'''::date,'''|| to_date ||'''::date,'''|| cond ||''')'; 
    loop  --开始循环
        fetch cur_date INTO var_day;  --将游标指定的值赋值给变量
        IF found THEN 
             ---------------------------------------
             --任意的逻辑,或调用其他function
             ---------------------------------------
            buffer:= buffer || to_char(var_day,'yyyyMMdd'); 
           ELSE 
            exit; 
            END IF; 
    END loop;  --结束循环
close cur_date;  --关闭游标
RETURN buffer;
END
$ LANGUAGE plpgsql;

执行function

SELECT fun_datecursor('2008-03-01','2008-03-31','1 day’);
Categories: 零敲碎打 Tags: , ,