sql >> データベース >  >> RDS >> Oracle

SQLローダー-2番目のエンクロージャ文字列が存在しません

    最後のフィールドが常に存在する場合(trailing nullcols そうではないことを示唆しています)、フォーマットをある程度制御できる場合は、 CONTINUEIF 2行目を同じ論理レコードの一部として扱うディレクティブ。

    commentsの場合 フィールドは常に存在し、二重引用符で囲まれているため、次のことができます。

    ...
    truncate
    continueif last != x'22'
    into table ...
    

    次のようなデータレコードを処理します:

    S;Y;"Test 1"
    F;N;"Test 2"
    P;Y;"Test with
    new line"
    P;N;""
    

    または、コメントフィールドの後に常に区切り文字がある場合は、入力されているかどうかに関係なく、次のようになります。

    ...
    truncate
    continueif last != ';'
    into table ...
    

    どちらが処理しますか:

    S;Y;Test 1;
    F;N;"Test 2";
    P;Y;Test with
    new line;
    P;N;;
    

    どちらの方法でも、データは次のように読み込まれます。

    S M COMMENTS
    - - ------------------------------
    S Y Test 1
    F N Test 2
    P Y Test withnew line
    P N
    

    しかし、これはデータから新しい行を失います。これを維持するには、CONTINUEIFの代わりに、終了フィールド区切り文字が存在する必要があります。 ストリームレコード形式を使用して、レコードセパレータを変更できます。

    ...
    infile 'C:\Users\lab.csv' "str ';\n'"
    truncate
    into table ...
    

    "str ';\n'" ターミネータをフィールドターミネータと改行文字の組み合わせとして定義します。分割コメントの最終行には、その組み合わせのみが含まれます。以前のバージョンと同じデータファイルを使用すると、次のようになります。

    S M COMMENTS
    - - ------------------------------
    S Y Test 1
    F N Test 2
    P Y Test with
        new line
    
    P N
    
    4 rows selected.
    

    Windowsを使用しているため、\rを含める必要がある場合があります フォーマットでも、例えば"str ';\r\n'" 、しかし私はそれを確認することができません。



    1. Oracle®からのSalesforceの更新

    2. Mysqlは日付でソートしますが、年は無視します

    3. データベースからbase64画像を取得する

    4. 11i/R12のゲストユーザーパスワード