问题:将一个查询出的P表中某列数据循环取出,对其截取拼接字符成B表表名,当成参数传入B表中,通过循环判断B表是否存在数据来完成修改添加数据操作。
declare
p_ywlx varchar2(200);--要从P表中取出的某列
tname varchar2(100);--修改添加需要的参数
tblx varchar2(100); --B表表名
b_xzqdm number(8);--查询出B表某列作为参数
b_jzsbbsm varchar2(10); --查询出B表某列作为参数
cursor cur_ywlx is select name from tb_layers t where t.layertype in('db','ko'); --第一个游标
l_cur VARCHAR2(4000);--存sql语句
TYPE t_cur IS REF CURSOR;
l_rec t_cur; --第二个游标
mycount number(8);
begin
open cur_ywlx;
loop
fetch cur_ywlx into p_ywlx;--获取数据,游标下移一行
tname:=substr(p_ywlx, 4);
tblx:=p_ywlx||'_TBZT';
begin
OPEN l_rec FOR 'SELECT distinct xzqdm,jzsbbsm FROM '||tblx||' WHERE jzsbbsm is not null';
loop
fetch l_rec into p_xzqdm,p_jzsbbsm;
exit when l_rec%notfound;
--dbms_output.put_line('行政区代码:'||b_xzqdm||',设备标识码:'||b_jzsbbsm||',图斑类型:'||tname);
begin
select count(1) into mycount from TB_HCQY_LAYER where TABLENAME=tname and XZQDM=b_xzqdm ;
if mycount>0 then
--dbms_output.put_line('有数据,执行更新'||mycount);
UPDATE TB_HCQY_LAYER SET RWTBZT=0,RWTBSJ=sysdate WHERE 1=1 and XZQDM=b_xzqdm and TABLENAME=tname;
else
--dbms_output.put_line('无数据,执行插入');
INSERT INTO TB_HCQY_LAYER(TABLENAME, XZQDM, RWTBZT, RWTBSJ) VALUES(tname,b_xzqdm,0,sysdate);
End if;
end;
end loop;
close l_rec;
end;
exit when cur_ywlx%notfound;
end loop;
close cur_ywlx;
end;