Изглежда, че смесвате няколко начина да направите това. Грешката е, защото се опитва да интерпретира "test_file.xml"
вътре LOBFILE()
като препратка към поле.
Ако знаете, че ще заредите само един 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.
Прочетете повече в документацията .
И двете ще ви свършат работа. Тъй като имате само един файл във вашия пример, първата версия може да е малко по-опростена, но ако ще зареждате множество файлове (с ред таблица на файл), втората версия е по-полезна.