Performance 在PL/SQL中的FORALL循环中插入
在pl/sql中,是否可以使用Performance 在PL/SQL中的FORALL循环中插入,performance,plsql,forall,Performance,Plsql,Forall,在pl/sql中,是否可以使用FORALL对大容量插入执行类似操作 TYPE c_type1 IS RECORD ( column1 table1.column1%TYPE, column2 table1.column2%TYPE, client table2.client%TYPE ); type1 c_type1; CURSOR cur_t IS select * BULK COLLECT INTO recs from table3 ; begin FOR recs IN cur_
FORALL
对大容量插入执行类似操作
TYPE c_type1 IS RECORD
(
column1 table1.column1%TYPE,
column2 table1.column2%TYPE,
client table2.client%TYPE
);
type1 c_type1;
CURSOR cur_t IS select * BULK COLLECT INTO recs from table3 ;
begin
FOR recs IN cur_t
LOOP
SELECT * INTO type1 FROM (select a.column1, a.column2,imm.client
...
from table1 a, table2 imm
WHERE
a.column1 = recs.column1
) WHERE ROWNUM=1;
INSERT INTO table2 values (recs.column1,type1.column2);
...
附言:还有80多列要插入。你的问题不太清楚,但看看你的代码,我有以下几行。检查这是否是你要找的
declare
CURSOR cur_t IS
select t3.column1 , t1.column2
from table3 t3
inner join table1 t1
on t3.column1 = t1.column1;
type var_cur is table of cur_t%rowtype;
var var_cur;
begin
open cur_t;
LOOP
FETCH cur_t bulk collect into var limit 100;
EXIT WHEN cur_t%NOTFOUND;
FORALL i IN 1 .. var.count SAVE EXCEPTIONS
INSERT INTO TABLE2
VALUES var(i);
END LOOP;
CLOSE distinctUserIdCursor;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error in Insertion of record' || '~~~~' || SQLERRM);
FOR indx IN 1 .. SQL%BULK_EXCEPTIONS.COUNT
LOOP
DBMS_OUTPUT.put_line (SQL%BULK_EXCEPTIONS (indx).ERROR_INDEX|| ': '
|| SQL%BULK_EXCEPTIONS (indx).ERROR_CODE);
END LOOP;
end;
你可以用这种方式使用forall@如果您注意到,请输入..插入表2中的值(记录column1,类型1.column2);我必须插入两个表中的记录。表3使用了什么..为什么要运行循环。问题不清楚。表命名不正确。游标声明没有任何
into
子句,并且recs
数组没有在任何地方声明,尽管游标为循环隐式声明了一条recs
记录。我真的搞不懂。试着把你的问题格式化。它们必须对我们有意义。在问下一个问题之前,请先阅读。对于type1..中每个匹配的REC记录,应该只有1条记录..内部联接可能会创建2个条目a.column1=recs.column1),其中ROWNUM=1;好的,以我的代码为框架,实现你的逻辑。我希望它能起作用。我解释了如何使用forall。