操作后插入另一个表

时间:2015-07-15 21:26:05

标签: oracle plsql

我在两个不同的数据库中有两个具有相同结构的表。

现在,我想将一个表中的内容(比如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

1 个答案:

答案 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);

如果您的数据量更大,则需要使用限制子句和提交机制。