你似乎混淆了一些做法。该错误是因为它试图将LOBFILE()
中的"test_file.xml"
解释为字段参考。
如果你知道你将只从单一的文本文件中加载一个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文档填充字符的行,因为只有一个,所以只有一个填充物。
请注意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.
Read more in the documentation。
两者都适合你。由于在示例中只有一个文件,所以第一个版本可能会稍微简单一些,但是如果您要加载多个文件(每个文件使用一个表格行),则第二个版本更有用。
第一种方法工作正常,非常感谢。 – Kumar