表Aから表Bへデータをコピーしています。表Aでは、国(EN、ES、RU、UK)の4つの列があります。国ごとの列は、表Bの別個の行です。さらに、表Bの各行は複製され、次の順序番号を受け取る必要があります。DBMS_OUTPUTでの配列とエラー処理への一括収集
表A - 私のカーソル
+---------+---------+---------+---------+---------+
| Company | EN | ES | RU | UK |
+---------+---------+---------+---------+---------+
| Intel | 123 345 | 453 343 | 444 101 | 110 232 |
+---------+---------+---------+---------+---------+
表B表Aでは
+---------+---------+-----+
| Company | Country | SEQ |
+---------+---------+-----+
| Intel | 123 345 | 0 |
| Intel | 123 345 | 1 |
| Intel | 453 343 | 0 |
| Intel | 453 343 | 1 |
| INTEL | 444 101 | 0 |
| INTEL | 444 101 | 1 |
| INTEL | 110 232 | 0 |
| INTEL | 110 232 | 1 |
+---------+---------+-----+
私は1,000,000行を持っています。
表Bでは、1,000,000(行)x 4(国)x 2(seq)= 8,000,000が必要です。
データを挿入する手順を準備しました。表BにDMLエラーの場合
BEGIN
OPEN my_cursor;
LOOP
EXIT WHEN my_cursor%notfound;
FETCH my_cursor BULK COLLECT INTO TAB LIMIT 500;
FOR y in 0..1 LOOP
FORALL x IN TAB.first..TAB.last
INSERT INTO table_B ("company","country","seq") VALUES (tab(x)."company", tab(x)."EN", y);
FORALL x IN TAB.first..TAB.last
INSERT INTO table_B ("company","country","seq") VALUES (tab(x)."company", tab(x)."ES", y);
FORALL x IN TAB.first..TAB.last
INSERT INTO table_B ("company","country","seq") VALUES (tab(x)."company", tab(x)."RU", y);
FORALL x IN TAB.first..TAB.last
INSERT INTO table_B ("company","country","seq") VALUES (tab(x)."company", tab(x)."UK", y);
END LOOP;
COMMIT;
END LOOP;
CLOSE my_cursor;
END;
、私は一緒に、例えばDBMS_OUTPUT のエラーコードをアレイ(タブ)の変数の値を返すことがあります
DBMS_OUTPUT.PUT_LINE(tab(x)."company" || ' ' || tab(x)."UK" || SQLERRM);
ですそのようなエラーを処理することは可能ですか?どのようにしてこのようなソリューションを実装できますか? 。
このリンクは質問に答えるかもしれませんが、回答の重要な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 - [レビューから](/レビュー/低品質の投稿/ 18182580) –
コメントありがとうございます@ max23_私はそれに応じて自分の投稿を更新しました。 – Guillaume