Zdá se, že pletete několik způsobů, jak toho dosáhnout. Chyba je způsobena tím, že se pokouší interpretovat "test_file.xml"
uvnitř LOBFILE()
jako odkaz na pole.
Pokud víte, že načtete pouze jeden dokument XML z jednoho textového souboru, můžete vytvořit svůj kontrolní soubor:
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
sekce má řádek s výplňovým znakem pro každý dokument XML v souboru, a protože je pouze jeden, je zde jedna výplň.
Všimněte si CONSTANT
což způsobí, že hledá soubor nazvaný takto, nikoli pole. Soubor protokolu zobrazuje tento statický název:
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.
Chcete-li použít pole, měli byste mít datový soubor s názvem souboru, nazvěme jej test_loading.dat
aby odpovídal názvu kontrolního souboru, který obsahuje:
test_file.xml
A kontrolní soubor, který to používá jako INFILE a obsah jeho prvního pole jako název souboru:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Tentokrát soubor protokolu ukazuje, že název je načítán dynamicky:
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.
Další informace naleznete v dokumentaci .
Obojí vám bude fungovat. Protože ve svém příkladu máte pouze jeden soubor, první verze může být o něco jednodušší, ale pokud budete načítat více souborů (s řádkem tabulky na soubor), je užitečnější druhá verze.