我需要创建一个PL / SQL匿名块,它必须将数据从t_src
复制到t_dest
,并将重复的值复制到表t_err
中。
t_src
有两列填充数据,但没有主键。
t_dest
为空,第1列为主键。如果存在重复异常,我必须将其传递并将重复记录存储在t_err
中。我必须使用游标,forall和BULK COLLECT
。到目前为止,我创建了以下块:
DECLARE
CURSOR c_copy IS
select column1, column2
from t_src;
TYPE curtype IS TABLE of c_copy%ROWTYPE;
cursor1 curtype;
BEGIN
OPEN c_copy;
LOOP
FETCH c_copy BULK COLLECT INTO cursor1;
FORALL c_count IN 1..cursor1.COUNT SAVE EXCEPTIONS
INSERT INTO t_dest
VALUES curtype(c_count)
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO t_err VALUES curtype(c_count);
EXIT WHEN c_copy%NOTFOUND
END LOOP;
CLOSE c_copy;
END
答案 0 :(得分:0)
TYPE curtype IS表c_copy%ROWTYPE;
以上行引起了问题。
您需要为每个字段(即column1,column2)创建表类型变量。
TYPE tab_column1是t_src.COLUMN1%TYPE的表; TYPE tab_column2是t_src.column2%type;
的表L_column1 tab_column1; L_column2 tab_column2;
然后使用
FeTCH c_copy BULK收集到L_column1,L_column2;
之前我遇到过类似的问题,这是我用来修复的解决方法。