--实现要求:从表db_aa.db_aa获取满足条件的一个记录集,并逐条获取每条记录中的每列值,同时将逐条获取每条记录中的col1列值通过查询条件来
--抽取其它用户下的不同表的数据后插入到指定的用户下的相应表中
表db_aa.db_aa(col1,col2,col3,col4,col5,col6,col7...)
declare
--定义表行变量
type Rec_table_type is table of db_aa.table1%rowtype;
Var_rows Rec_table_type;
--db_aa用户下的table1表
Var_table1_col1 db_aa.table1.col1%type;--用作查询条件
--定义要抽取相应表中的数据变量
--db_bb用户下的table2表
Var_table2_col1 db_bb.table2.col1%type;
Var_table2_col2 db_bb.table2.col2%type;
--db_bb用户下的table3表
Var_table3_col1 db_bb.table3.col1%type;
Var_table3_col2 db_bb.table3.col2%type;
--db_bb用户下的table4表
Var_table4_col1 db_bb.table4.col1%type;
Var_table4_col2 db_bb.table4.col2%type;
Var_table4_col3 db_bb.table4.col3%type;
Var_table4_col4 db_bb.table4.col4%type;
--db_bb用户下的table5表
Var_table5_col1 db_cc.table5.col1%type;
Var_table5_col2 db_cc.table5.col2%type;
Var_table5_col3 db_cc.table5.col3%type;
begin
--处理该分局下的分局税管员数据
selecta.* BULK COLLECT INTO Var_rowsfrom db_aa.table1 a where ......;
if (Var_rows.count > 0) then
--逐条获取db_aa.table1满足条件的记录,同时通过获取的db_aa.table1表中的col1列查询出其它用户表下的相关数据(问题1:请况这样的处理方式是否可理)
for i in Var_rows.first .. Var_rows.last loop
begin
Var_table1_col1
:= Var_rows.col1(i);
--抽取不同用户下的表中列数据(问题2:请问如果以后的SQL增加时 If Sql%Rowcount = 0 就要增加是否有更简洁的写法处理)
select col1,col2 into Var_table2_col1,Var_table2_col2 from db_bb.table2 where code=Var_table1_col1;
If Sql%Rowcount = 0 Then
Var_table2_col1:=null;
Var_table2_col2:=null;
endif;
select col1,col2 into Var_table3_col1,Var_table3_col2 from db_bb.table3 where code=Var_table1_col1;
If Sql%Rowcount = 0 Then
Var_table3_col1:=null;
Var_table3_col2:=null;
endif;
select col1,col2,col3,col4 into Var_table4_col1,Var_table4_col2,Var_table4_col3,Var_table4_col4 from db_bb.table4 where code=Var_table1_col1;
If Sql%Rowcount = 0 Then
Var_table4_col1:=null;
Var_table4_col2:=null;
Var_table4_col3:=null;
Var_table4_col4:=null;
endif;
select col1,col2,col3 into Var_table5_col1,Var_table5_col2,Var_table5_col3 from db_cc.table5.col1 where code=Var_table1_col1;
If Sql%Rowcount = 0 Then
Var_table5_col1:=null;
Var_table5_col2:=null;
Var_table5_col3:=null;
endif;
--将抽取的数据插入到相应用户下的不同表中
insert into db_dd(col1,cole2,col3,col4,col5,col6,col7,col8,clo9,col10)
values (Var_table1_col1,Var_rows.col2(i),Var_rows.col3(i),Var_rows.col4(i),Var_rows.col5(i),Var_table2_col1,Var_table2_col2,Var_table3_col1,Var_table3_col2,sysdate);
insert into db_cc(col1,cole2,col3,col4,col5,col6,col7,col8,clo9,col10)
values (Var_table1_col1,Var_rows.col6(i),Var_rows.col7(i),Var_table4_col1,Var_table4_col2,Var_table4_col3,Var_table4_col4,Var_table5_col1,Var_table5_col2,Var_table5_col3);
commit;
end;
end loop;
end if;
end;
|