Wydaje się, że mieszasz kilka sposobów na zrobienie tego. Błąd jest spowodowany tym, że próbuje zinterpretować "test_file.xml"
wewnątrz LOBFILE()
jako odniesienie do pola.
Jeśli wiesz, że załadujesz tylko jeden dokument XML z jednego pliku tekstowego, możesz utworzyć plik kontrolny:
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
sekcja zawiera wiersz ze znakiem wypełniającym dla każdego dokumentu XML w pliku, a ponieważ jest tylko jeden, jest jeden wypełniacz.
Zwróć uwagę na CONSTANT
co sprawia, że szuka pliku o nazwie tak, a nie pola. Plik dziennika pokazuje tę statyczną nazwę:
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.
Aby użyć pola, musisz mieć plik danych z nazwą pliku, nazwijmy go test_loading.dat
aby dopasować nazwę pliku kontrolnego, który zawiera:
test_file.xml
I plik kontrolny, który używa tego jako INFILE, a zawartość jego pierwszego pola jako nazwę pliku:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Tym razem plik dziennika pokazuje, że nazwa jest pobierana dynamicznie:
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.
Więcej informacji znajdziesz w dokumentacji .
Albo będzie dla ciebie pracować. Ponieważ w swoim przykładzie masz tylko jeden plik, pierwsza wersja może być nieco prostsza, ale jeśli będziesz ładować wiele plików (z jednym wierszem tabeli na plik), druga wersja jest bardziej przydatna.