我有一个暂时存储数据的临时表TEMP_TABLE1
&最后合并到主表。我使用它作为不同结构的多个目标表的公共表。
COL1 VARCHAR2(2000)
COL2 VARCHAR2(2000)
COL3 VARCHAR2(2000)
COL4 VARCHAR2(2000)
COL5 VARCHAR2(2000)
COL6 VARCHAR2(2000)
COL7 VARCHAR2(2000)
COL8 VARCHAR2(2000)
COL9 VARCHAR2(2000)
COL10 VARCHAR2(2000)
COL11 VARCHAR2(2000)
COL12 VARCHAR2(2000)
..
COL40 VARCHAR2(2000)
COL41 DATE
COL42 DATE
现在我需要插入但丢弃一些不需要/错误的行。 所以我现在有一个示例目标表的以下工作代码。
declare
type l_array is table of TEMP_TABLE3%rowtype;
l_rec_data l_array;
l_sql VARCHAR2(200);
l_start NUMBER:=1;
j NUMBER;
begin
l_sql := 'select COL1,COL2,COL3,COL4,COL5 FROM TEMP_TABLE1';
execute immediate l_sql bulk collect into l_rec_data;
DBMS_OUTPUT.PUT_LINE(l_rec_data.COUNT);
begin
loop
begin
forall i in l_start .. l_rec_data.count
insert into TEMP_TABLE3 (COL1,COL2,COL3,COL4,COL5) values ( l_rec_data(i).COL1,l_rec_data(i).COL2,l_rec_data(i).COL3,l_rec_data(i).COL4,l_rec_data(i).COL5);
EXIT;
exception
when DUP_VAL_ON_INDEX THEN
dbms_output.put_line( 'DUP_VAL_ON_INDEX row index = ' || (l_start+sql%rowcount) || ' ' || sqlerrm );
j:=l_start+sql%rowcount;
UPDATE TEMP_TABLE3 SET COL2=l_rec_data(j).COL2, COL3=l_rec_data(j).COL3, COL4=l_rec_data(j).COL4, COL5=l_rec_data(j).COL5 WHERE COL1=l_rec_data(j).COL1;
l_start := l_start + 1;
when others then
dbms_output.put_line( 'Bad row index = ' || (l_start+sql%rowcount) || ' ' || sqlerrm );
l_start := l_start + sql%rowcount + 1;
end;
end loop;
end;
END;
但是,我想为各种表动态声明l_array。
例如:我可能想将l_array声明为(TEMP_TABLE3%rowtype
- 几行)的表格,如下所示:
type l_array is table of TABLE(COL1,COL2,COL3,COL4)%rowtype;