1

Student_id 整数、name varchar および age を列として持つ学生テーブルがあります。Oracle を dbms として使用します。フラットファイルからデータを取得し、SQL ローダーを使用してデータをロードします。そのため、ロード中にレコードの重複などにより例外が発生します。アナライザーの設計を考えたことを確認するため。そのために、すべての列が varchar であることを除いて、同じ列を含むレプリカ テーブルを設計しました。そのため、最初にアナライザー テーブルにデータをロードし、次にレコードを識別します。アナライザー テーブルには varchar 列があるため、student_id フィールドのテキストなど、あらゆる種類のデータを使用できます。SQL クエリを使用してこれらのレコードを識別する方法はありますか?

4

2 に答える 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 に答える