あなたはこれを行ういくつかの方法を混同しているようです。エラーは、"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番目のバージョンの方が便利です。