PL/SQL 匿名ブロックを作成する必要があります。このブロックは、からデータをコピーし、複製t_src
さt_dest
れた値を table に格納する必要がありますt_err
。
t_src
データで満たされた 2 つの列があり、主キーはありません。
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