Du verkar blanda ihop några sätt att göra detta på. Felet beror på att den försöker tolka "test_file.xml"
inuti LOBFILE()
som fältreferens.
Om du vet att du bara kommer att ladda ett XML-dokument från en enda textfil kan du skapa din kontrollfil:
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
sektionen har en rad med ett utfyllnadstecken för varje XML-dokument i filen, och eftersom det bara finns ett, finns det ett enda utfyllnadsmedel.
Notera CONSTANT
vilket gör att den letar efter en fil som heter det, inte ett fält. Loggfilen visar det statiska namnet:
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.
För att använda ett fält skulle du ha en datafil med filnamnet, låt oss kalla den test_loading.dat
för att matcha kontrollfilens namn, som innehåller:
test_file.xml
Och en kontrollfil som använder den som INFILE, och innehållet i dess första fält som filnamn:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Den här gången visar loggfilen att namnet hämtas dynamiskt:
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.
Båda kommer att fungera för dig. Eftersom du bara har en enda fil i ditt exempel kan den första versionen vara något enklare, men om du ska ladda flera filer (med en tabellrad per fil) är den andra versionen mer användbar.