我在两个不同的数据库中有两个具有相同结构的表。
现在,我想将一个表中的内容(比如db1的table1)复制到另一个表(比如db2的table2),但是我想在插入之前对某些列进行某些操作。
例如,如果db1的table1有50列,我想操作一些(比如5个)列并按原样插入其余列
以下是我所做的。
我正在编写一个pl / sql脚本,声明与表列
一样多的变量
然后一个光标从表中选择
然后在循环中迭代以对各个列执行操作并插入table2
DECLARE
var1 datatype;
var2 datatype;
..
CURSOR MY_CUR is
SELECT * FROM table1;
BEGIN
FOR CUR_ROW in MY_CUR
LOOP
var1 := CUR_ROW.column1
var2 := CUR_ROW.column2
..
logic to modify some variables e.g. var1 := LPAD(var1,5,'1');
..
insert into table2@db2
(column1, column2 ..)
values
(var1, var2 ..);
END LOOP;
END;
这是非常缓慢的,有没有其他有效的方法来实现这个目标?左(可能是BULK COLLECT或FORALL?)但是使用BULK COLLECT或FORALL,我怎么能对各个列进行操作?
我正在使用Oracle10g
答案 0 :(得分:0)
尝试再使用for循环构建集合,然后使用批量插入语句插入它。首先使用用于插入的表的行类型声明集合。例如
type table2_typ is table of table2@db2%rowtype
v_table2_typ table2_typ;
在基本for循环中填充集合v_table2_typ,然后使用批量收集插入插入此例如。
FORALL i IN 1..v_table2_typ.COUNT
INSERT INTO t1 VALUES v_table2_typ(i);
如果您的数据量更大,则需要使用限制子句和提交机制。