Có vẻ như bạn đang trộn lẫn một số cách để làm việc này. Lỗi là do nó đang cố gắng diễn giải "test_file.xml"
bên trong LOBFILE()
như một tham chiếu trường.
Nếu bạn biết mình sẽ chỉ tải một tài liệu XML từ một tệp văn bản duy nhất, bạn có thể tạo tệp điều khiển của mình:
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
phần có một hàng với ký tự điền cho mỗi tài liệu XML trong tệp và vì chỉ có một, nên có một ký tự điền.
Lưu ý CONSTANT
điều này làm cho nó tìm kiếm một tệp có tên như vậy, không phải một trường. Tệp nhật ký hiển thị tên tĩnh đó:
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.
Để sử dụng một trường bạn sẽ có một tệp dữ liệu với tên tệp, hãy gọi nó là test_loading.dat
để khớp với tên tệp điều khiển, có chứa:
test_file.xml
Và một tệp điều khiển sử dụng nó làm INFILE và nội dung của trường đầu tiên của nó làm tên tệp:
LOAD DATA
INFILE test_loading.dat
append INTO TABLE TEST_XML
XMLType(XMLDATA)
FIELDS
(
filename FILLER CHAR(30),
XMLDATA LOBFILE(filename) TERMINATED BY EOF
)
Lần này, tệp nhật ký hiển thị tên đang được truy xuất động:
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.
Hoặc sẽ làm việc cho bạn. Vì bạn chỉ có một tệp duy nhất trong ví dụ của mình nên phiên bản đầu tiên có thể đơn giản hơn một chút, nhưng nếu bạn tải nhiều tệp (với một hàng bảng trên mỗi tệp) thì phiên bản thứ hai sẽ hữu ích hơn.