Student_id 整数、name varchar および age を列として持つ学生テーブルがあります。Oracle を dbms として使用します。フラットファイルからデータを取得し、SQL ローダーを使用してデータをロードします。そのため、ロード中にレコードの重複などにより例外が発生します。アナライザーの設計を考えたことを確認するため。そのために、すべての列が varchar であることを除いて、同じ列を含むレプリカ テーブルを設計しました。そのため、最初にアナライザー テーブルにデータをロードし、次にレコードを識別します。アナライザー テーブルには varchar 列があるため、student_id フィールドのテキストなど、あらゆる種類のデータを使用できます。SQL クエリを使用してこれらのレコードを識別する方法はありますか?
質問する
110 次
2 に答える
2
より良いアプローチは、SQL * Loaderで現在アップロードしているファイルに基づいて外部テーブルを定義し、それを「アナライザー」テーブルとして扱うことです。重複を識別する方法は、標準のSQL構文を使用する方法であり、チェックする必要のある新しいデータセット内、および古いデータセットと新しいデータセット間で重複があるかどうかによって異なります。後者のみの場合、MERGEステートメントはこの目的に非常に効率的です。
そのvarcharのアイデアについてはよくわかりません。ファイルに正しいデータがない限り、それが何に寄与するのかわかりません。
于 2013-01-02T11:37:50.540 に答える
1
LOG ERRORS を使用するのはどうですか? 例えば:
まず、エラーを保持するテーブルを作成します....
DBMS_ERRLOG.CREATE_ERROR_LOG('STUDENT');
次に、データを tmp テーブルに sqlload してから、plsql ルーチンを実行してデータをロードします.....
INSERT INTO student
SELECT to_number(ts.student_id), name, to_number(age)
FROM tmp_student ts
LOG ERRORS
REJECT LIMIT UNLIMITED;
エラーを確認するには:
SELECT * FROM err$_student;
于 2013-01-02T13:10:48.787 に答える