加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

批量执行动态SQL语句

发布时间:2021-01-12 22:11:59 所属栏目:MySql教程 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 -- exesql_batchdeclare-- incomming paramv_oriSql VARCHAR2(1024):= 'create table TABLE_[N]_[D] as select * from TABLE where 1=2';-- original

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

-- exesql_batch
declare
	-- incomming param
	v_oriSql VARCHAR2(1024):= 'create table TABLE_[N]_[D] as select * from TABLE where 1=2';	-- original sql
	v_beg  NUMBER := 0;  -- begin of number
	v_end NUMBER := 9; -- end of number [beg,end]
	v_begDate DATE := to_date('20130701','YYYYMMDD');	-- begin date
	v_endDate DATE := to_date('20130731','YYYYMMDD');	-- end date,[beg,end]
	v_dateSw NUMBER := 1; -- date switch 1:day,others:month
	-- internel var
	v_dateNum NUMBER := 0;
	v_numNum NUMBER := 0;
	v_strDate VARCHAR2(8);
	v_destSql VARCHAR2(2000);
	V_DATE VARCHAR2(3) := '[D]';
	V_NUM VARCHAR2(3) := '[N]';
begin
	if INSTR(v_oriSql,V_DATE) <> 0 then
		if v_dateSw = 1 then
			v_dateNum := trunc(v_endDate,'DD') - trunc(v_begDate,'DD');
		else
			v_dateNum := MONTHS_BETWEEN(trunc(v_endDate,'MM'),trunc(v_begDate,'MM'));
		end if;
	end if;
	
	if INSTR(v_oriSql,V_NUM) <> 0 then
		v_numNum := v_end - v_beg;
	end if;
	
	-- loop
	for i in 0 .. v_numNum loop
		for j in 0 .. v_dateNum loop
			if v_dateSw = 1 then
				v_strDate := to_char(v_begDate + j,'YYYYMMDD');
			else
				v_strDate := to_char(ADD_MONTHS(v_begDate,j),'YYYYMM');
			end if;
			v_destSql := REPLACE(v_oriSql,V_NUM,v_beg + i);
			v_destSql := REPLACE(v_destSql,V_DATE,v_strDate);
			EXECUTE IMMEDIATE v_destSql;
		end loop;
	end loop;
end;

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读