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’); |
Recent Comments