Bạn đang đọc từng dòng của tệp, nhưng lại ghi đè xmlClob
của bạn với từng dòng, không nối tiếp. Bạn có thể xây dựng CLOB bằng cách đọc thành varchar2
đệm và thêm vào, nhưng bạn cũng có thể sử dụng DBMS_LOB
các quy trình tích hợp để thực hiện việc đó cho bạn:
DECLARE
xmlClob CLOB;
xmlFile BFILE;
x XMLType;
src_offset number := 1 ;
dest_offset number := 1 ;
lang_ctx number := DBMS_LOB.DEFAULT_LANG_CTX;
warning integer;
BEGIN
xmlFile := BFILENAME('XMLPARSERADRESYCUZK', 'pokus.xml');
DBMS_LOB.CREATETEMPORARY(xmlClob, true);
DBMS_LOB.FILEOPEN(xmlFile, DBMS_LOB.FILE_READONLY);
DBMS_LOB.LOADCLOBFROMFILE(xmlClob, xmlFile, DBMS_LOB.LOBMAXSIZE, src_offset,
dest_offset, DBMS_LOB.DEFAULT_CSID, lang_ctx, warning);
x := XMLType.createXML(xmlClob);
DBMS_LOB.FILECLOSEALL();
DBMS_LOB.FREETEMPORARY(xmlClob);
FOR r IN (
...
Khi tôi sử dụng nó và tải tệp của bạn, tôi nhận được kết quả đầu ra:
CUZK Pod smdli.t.m 1800/9
Bạn có thể muốn một số đăng ký lỗi xung quanh DBMS_LOB
cuộc gọi, đây chỉ là một bản demo đơn giản.