存储过程遍历

简介: 达梦数据库存储过程

需求:达梦数据库,每个省份有对应的一张表,effective_11 ~ effective_65 差不多30多个表,里边存储的企业数据,现在要写一个存储过程,遍历查询这么多表并且求个数,最后以(地区code、数量)的方式插入到一个新表中!

新表字段(id,area_code,valid_num,create_time)



image.png


AS

--声明地区数组

type vcode is table of varchar;

areaCodeARR vcode:=vcode('11','12','13','14','15','21','22','23','31','32','33','34','35',

'36','37','41','42','43','44','45','46','50','51','52','53','54','61','62','63','64','65');

numSql varchar;--求个数的sql

insertSql varchar;-- 各省的添加sql

totalSql varchar;-- 合计的sql

effNum integer := 0;--各省的有效个数

totalNum integer := 0;--合计

BEGIN

for i in 1 .. areaCodeARR.count LOOP

-- 求各省的有效个数,并累加给合计

numSql :=' select count(1) from effective_'||areaCodeARR(i)||' where licence_type = 0';

execute immediate numSql into effNum;

totalNum := totalNum + effNum;

-- 一个省给LICENCE_VALID表添加一条记录

insertSql :='insert into LICENCE_VALID (AREA_CODE,VALID_NUM,CREATE_TIME)';

insertSql := insertSql || ' select * from (select '||areaCodeARR(i)||'0000 as AREA_CODE,count(1) as VALID_NUM,SYSDATE as CREATE_TIME';

insertSql := insertSql || ' from effective_'||areaCodeARR(i)||' where licence_type = 0)';

execute immediate insertSql;

end LOOP;

-- 最后添加合计

totalSql := 'insert into LICENCE_VALID (AREA_CODE,VALID_NUM,CREATE_TIME) values (''total'','||totalNum||',SYSDATE)';

execute immediate totalSql;

commit;

END


image.png

相关文章
|
存储 SQL Java
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
765 0
MySQL存储过程手册,及创建存储过程:循环为所有表添加字段
|
7月前
|
存储 SQL Oracle
|
7月前
|
存储 SQL 关系型数据库
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
⑩⑤【DB】详解MySQL存储过程:变量、游标、存储函数、循环,判断语句、参数传递..
105 0
|
SQL Oracle 关系型数据库
SQL常用函数集合(一)
SQL常用函数集合(一)
148 0
SQL常用函数集合(一)
SQL 循环遍历结果集
SQL 循环遍历结果集
232 0
|
存储
关键字查找相关存储过程,函数和视图
关键字查找相关存储过程,函数和视图
|
数据库
探讨:通过循环数组或者集合,插入数据库中没有的数据
要将一组物品 As 放入盒子 Bs 中,如果盒子有该物品,则不把该物品放入盒子。 即,通过循环数组或者集合,插入数据库中没有的数据。
2388 0
|
SQL 关系型数据库 数据库