0

初めての 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 権限を要求するかを選択する必要があるようです。 これは正しいです?

ありがとうございました!

4

0 に答える 0