初めての PL/SQL スクリプトを作成しています。
私が書いているバッチ処理スクリプトでは、テーブル A の「コメント」フィールドから、さまざまな整合性制約を持つテーブル B の列にデータを挿入しています(したがって、ORA-12899 に関する懸念 - 値が長すぎる、または ORA -02291 - 値は許可されていません) .
テーブル B に値を挿入しようとして例外が発生した場合、標準出力を使用して、挿入をスキップする必要があることだけでなく、テーブル A のどの内容が挿入をスキップしたかを報告したいと考えています。
テーブル A のデータを手続き的にループし、本質的に一度に 1 つの INSERT を呼び出して、その呼び出しに対して例外を発生させたデータの値を報告できることを認識しています。しかし、可能であれば、「SQL に仕事を任せる」という原則に固執したいと思います。
ストレート SQL の"INSERT INTO {Table B} SELECT FROM {Table A}"で例外が発生したときに、 Table A のデータを表示する方法はありますか?
注: 私はデータベースに対する DDL 権限を持っておらず、何も取得できないことを知っています。INSERT/UPDATE/SELECT のような DML とクエリしかありません。残念ながら、「ログテーブルを作成する」などの解決策は問題外です。
更新: 私の質問の 2 番目の部分: Question 1065829を読んで、無効な挿入をスキップして有効な挿入を続行することさえ、ストレート SQL と DDL アクセスなしでは不可能であると考え始めています (これは、上記の質問を書く前に可能です)。テーブル A の行を反復処理するか、一度に 1 つの INSERT 呼び出しを実行するか、特別な DDL 権限を要求するかを選択する必要があるようです。 これは正しいです?
ありがとうございました!