マテリアライズド・ビューをリフレッシュしようとしているだけであれば、DMLエラー・ロギングを使用してすべての問題行を取り込む方法がわかりません。一方、マテリアライズド・ビューをリフレッシュする際に発生するすべてのエラーをキャプチャするために表を移入すると、表を作成してDMLエラー・ロギングを使用できます。
このテーブルに手動でデータを入力してから、create a materialized view on this prebuilt tableを入力します。マテリアライズド・ビューの使用方法とクエリー・リライトの種類によって、問題の原因となる可能性があります。作成した表には、基礎となる表のデータ(エラー・ログに書き込まれた行)が欠落している可能性があります。
テーブルとエラーログ
SQL> create table t (
2 col1 number,
3 col2 number
4 );
Table created.
Elapsed: 00:00:00.00
SQL> ed
Wrote file afiedt.buf
1 begin
2 dbms_errlog.create_error_log('T', 'T_ERR');
3* end;
SQL>/
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.01
SQL> create function f1
2 return varchar2
3 is
4 begin
5 return 'A';
6 end;
7/
Function created.
の作成には、10行を挿入してください。図3は、LEVEL
は3の倍数と関数によって返された文字列になりますので、今すぐ数
Elapsed: 00:00:00.01
SQL> insert into t(col1, col2)
2 select level,
3 (case when mod(level,3) = 0
4 then to_number(f1)
5 else mod(level,3)
6 end)
7 from dual
8 connect by level <= 10
9 log errors into t_err
10 reject limit unlimited;
7 rows created.
Elapsed: 00:00:00.01
SQL> ed
Wrote file afiedt.buf
1 select ora_err_mesg$, col1, col2
2* from t_err
SQL>/
ORA_ERR_MESG$ COL1 COL2
------------------------------ ---------- ----------
ORA-01722: invalid number 3 0
ORA-01722: invalid number 6 0
ORA-01722: invalid number 9 0
Elapsed: 00:00:00.00
に変換することはできません失敗マテリアライズド・ビューを作成するには、この事前作成表を使用します
SQL> ed
Wrote file afiedt.buf
1 create materialized view t
2 on prebuilt table
3 as
4 select 1 col1, 1 col2
5* from dual
SQL>/
Materialized view created.
Elapsed: 00:00:00.11
あなたはそれが私よりもはるかに優れていると言っています... FCNが複数の行を返すため、MViewはリフレッシュに失敗しています。これは、メインクエリからobject_IDを取得し、シード行のerrテーブルを使用してfcn出力を列としてクエリを実行するのに役立ちます。いずれにせよ、潜在的に何百万行もの行から、私たちが知ることができない原因となる1,000行になる可能性があります。私たちはそれを試してみましょう、私たちが成功すれば私は報告します。感謝ジャスティン – Marc
私はついに戻ってきました...私たちはMViewのエラーを記録するコードを実装しました。できます。私は、事前に構築されたテーブルからMViewを構築する方法については理解していませんでした。ハーーマントの記事は役に立たなかったが、それは遅れている。私はそれについて勉強しなければならないでしょう、私はすぐにそれが必要になると確信しています。 ;) – Marc