1

ビューからオラクルの対応するテーブルにデータをコピーするプロセスを設計しました。「ビュー名」をパラメータとして渡すプロシージャを呼び出すだけで、対応するテーブルが作成されます(存在しない場合はドロップしてテーブルを作成します)。したがって、これは動的に発生し、約 50 のビューがあり、それらは Oracle ジョブとしてスケジュールされています。

今問題になっているのは、いくつかの日に以下のエラーで失敗するいくつかのテーブルがあります...

ORA-01723: 長さゼロの列は許可されていません

この理由は、ビュー内のいくつかの列が null であることは承知していますが、すべての日ではありません。はい、これらの列に CAST を使用する必要がありますが、前述したように、これは動的に発生するため、それらの列がどれであるか、またはどのビューであるかが事前にわかりませんか? テーブルの作成を開始する前に、ビューに「長さゼロの列」があるかどうかを特定して、解決策を考えることができます。これに対するより良い救済策は本当に感謝しています。

ノート:

  1. CREATE TABLE TABLE_NAME AS SELECT * FROM VIEW_NAME --> これが私のテーブル作成SQLです。
  2. これを選択した理由は、'INSERT INTO' は、ログとロックのために、より多くの時間とリソースを必要とする可能性があるためです。

ありがとう、ナーガ」

4

2 に答える 2

0

これを選択した理由は、'INSERT INTO' は、ログとロックのために、より多くの時間とリソースを必要とする可能性があるためです。

誤った信念に基づいて、毎回テーブルを削除して再作成する方法に基づいていると思います。それらを切り捨て、オプションでログなしで直接パス挿入を使用すると、この問題なしで実質的に同じ結果が得られます。使用している場合:

create table .. as select from ...

...とにかく、操作を完全にログに記録しています。

于 2013-06-05T15:52:51.777 に答える