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

XMLデータの読み込み中に、制御ファイルが存在しないフィールドを参照しているというエラーが発生します

    あなたはこれを行ういくつかの方法を混同しているようです。エラーは、"test_file.xml"を解釈しようとしているためです。 LOBFILE()内 フィールド参照として。

    1つのテキストファイルから1つのXMLドキュメントのみをロードすることがわかっている場合は、制御ファイルを作成できます。

    LOAD DATA
    INFILE *
    append INTO TABLE TEST_XML
    XMLType(XMLDATA)
    FIELDS
    (
        FILL FILLER CHAR(1),
        XMLDATA LOBFILE(CONSTANT test_file.xml) TERMINATED BY EOF
    )
    BEGINDATA
    0
    

    BEGINDATA セクションには、ファイル内のXMLドキュメントごとにフィラー文字を含む行があります。フィラーは1つしかないため、フィラーは1つです。

    CONSTANTに注意してください これにより、フィールドではなく、それと呼ばれるファイルが検索されます。ログファイルには、静的な名前が示されています:

    Table TEST_XML, loaded from every logical record.
    Insert option in effect for this table: APPEND
    
       Column Name                  Position   Len  Term Encl Datatype
    ------------------------------ ---------- ----- ---- ---- ---------------------
    FILL                                FIRST     1           CHARACTER
      (FILLER FIELD)
    XMLDATA                           DERIVED     *  EOF      CHARACTER
        Static LOBFILE.  Filename is test_file.xml
    
    
    Table TEST_XML:
      1 Row successfully loaded.
      0 Rows not loaded due to data errors.
      0 Rows not loaded because all WHEN clauses were failed.
      0 Rows not loaded because all fields were null.
    

    ファイル名の付いたデータファイルがあるフィールドを使用するには、test_loading.datと呼びます。 以下を含む制御ファイル名と一致します:

    test_file.xml
    

    そして、それをINFILEとして使用し、最初のフィールドの内容をファイル名として使用する制御ファイル:

    LOAD DATA
    INFILE test_loading.dat
    append INTO TABLE TEST_XML
    XMLType(XMLDATA)
    FIELDS
    (
        filename FILLER CHAR(30),
        XMLDATA LOBFILE(filename) TERMINATED BY EOF
    )
    

    今回のログファイルには、名前が動的に取得されていることが示されています。

    Table TEST_XML, loaded from every logical record.
    Insert option in effect for this table: APPEND
    
       Column Name                  Position   Len  Term Encl Datatype
    ------------------------------ ---------- ----- ---- ---- ---------------------
    FILENAME                            FIRST    30           CHARACTER
      (FILLER FIELD)
    XMLDATA                           DERIVED     *  EOF      CHARACTER
        Dynamic LOBFILE.  Filename in field FILENAME
    
    
    Table TEST_XML:
      1 Row successfully loaded.
      0 Rows not loaded due to data errors.
      0 Rows not loaded because all WHEN clauses were failed.
      0 Rows not loaded because all fields were null.
    

    詳細についてはドキュメントをご覧ください

    どちらもあなたのために働くでしょう。この例ではファイルが1つしかないため、最初のバージョンの方が少し単純かもしれませんが、複数のファイルをロードする場合(ファイルごとにテーブル行を含む)、2番目のバージョンの方が便利です。




    1. 経度と緯度で距離を計算してSQLクエリを最適化するにはどうすればよいですか?

    2. postgresでISO-8601グレゴリオ暦の日付テーブルを作成する方法

    3. XML parserror:ドキュメント要素の後のジャンク

    4. sequelize.jsで関連付けられたモデルから属性をロードする方法