Je lijkt een paar manieren om dit te doen door elkaar te halen. De fout is omdat het de "test_file.xml"
. probeert te interpreteren binnen LOBFILE()
als veldreferentie.
Als u weet dat u slechts één XML-document uit een enkel tekstbestand zult laden, kunt u uw controlebestand maken:
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
De BEGINDATA
sectie heeft een rij met een opvulteken voor elk XML-document in het bestand, en aangezien er maar één is, is er een enkele opvuller.
Let op de CONSTANT
waardoor het zoekt naar een bestand met de naam dat, niet een veld. Het logbestand toont die statische naam:
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.
Om een veld te gebruiken zou je een gegevensbestand hebben met de bestandsnaam, laten we het test_loading.dat
noemen om overeen te komen met de naam van het controlebestand, die het volgende bevat:
test_file.xml
En een controlebestand dat dat als INFILE gebruikt en de inhoud van het eerste veld als bestandsnaam:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Deze keer toont het logbestand dat de naam dynamisch wordt opgehaald:
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.
Lees meer in de documentatie .
Ofwel zal voor u werken. Omdat je in je voorbeeld maar één bestand hebt, is de eerste versie misschien iets eenvoudiger, maar als je meerdere bestanden gaat laden (met een tabelrij per bestand), is de tweede versie handiger.