Você parece estar misturando algumas maneiras de fazer isso. O erro é porque ele está tentando interpretar o
"test_file.xml"
dentro de LOBFILE()
como referência de campo. Se você sabe que carregará apenas um documento XML de um único arquivo de texto, pode criar seu arquivo de controle:
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
O
BEGINDATA
seção tem uma linha com um caractere de preenchimento para cada documento XML no arquivo e, como há apenas um, há um único preenchimento. Observe o
CONSTANT
o que faz com que procure um arquivo chamado that, não um campo. O arquivo de log mostra esse nome estático: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.
Para usar um campo você teria um arquivo de dados com o nome do arquivo, vamos chamá-lo de
test_loading.dat
para corresponder ao nome do arquivo de controle, que contém:test_file.xml
E um arquivo de controle que usa isso como INFILE e o conteúdo de seu primeiro campo como o nome do arquivo:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Desta vez, o arquivo de log mostra que o nome está sendo recuperado dinamicamente:
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.
Leia mais na documentação .
Qualquer um funcionará para você. Como você tem apenas um único arquivo em seu exemplo, a primeira versão pode ser um pouco mais simples, mas se você estiver carregando vários arquivos (com uma linha de tabela por arquivo), a segunda versão é mais útil.