我有一个 PLSQL 过程,它从基础表中读取数据,并将其写入文件,然后将其推送到 oracle 对象存储。此过程通过 Oracle 集成云中的集成循环调用多次。示例程序代码如下:
declare
Lv_file UTL_FILE.file_type;
P_SubstrVal VARCHAR2(10000);
lv_file_name VARCHAR2 (100):= file_name;
P_Directory VARCHAR2(101) :='TEMP';
l_columnValClob CLOB;
P_offset NUMBER :=1;
P_amount NUMBER :=3000;
l_clobLen NUMBER :=0;
c_value NUMBER ;
l_cursor SYS_REFCURSOR;
TYPE fetched_data IS RECORD (
xml_data clob,
created_date date,
updated_date date
);
TYPE fetched_table IS TABLE OF fetched_data
INDEX BY PLS_INTEGER;
l_table_data fetched_table;
BEGIN
BEGIN
DBMS_CLOUD.DELETE_FILE('TEMP',file_name);
EXCEPTION
WHEN OTHERS THEN
null;
END;
Lv_file := utl_file.fopen(P_Directory,lv_file_name,'wb');
utl_file.put_raw(Lv_file,utl_raw.cast_to_raw('<?xml version="1.0" encoding="UTF-8"?><wd:DATA>'));
OPEN l_cursor FOR 'SELECT XML_DATA,CREATED_DATE,UPDATED_DATE FROM (SELECT a.*, ROWNUM rnum FROM (SELECT XML_DATA,CREATED_DATE,UPDATED_DATE FROM ' || table_name || ' order by employee_id) a WHERE ROWNUM <= ' || ending_row || ') WHERE rnum >= ' || starting_row ;
FETCH l_cursor BULK COLLECT INTO l_table_data;
CLOSE l_cursor;
RECORD_COUNT := l_table_data.COUNT;
FOR indx IN 1 .. l_table_data.COUNT
LOOP
P_offset := 1;
l_columnValClob := l_table_data (indx).XML_DATA;
l_clobLen := DBMS_LOB.GETLENGTH(l_columnValClob);
WHILE P_offset < l_clobLen
LOOP
P_SubstrVal := dbms_lob.substr(l_columnValClob,P_amount,P_offset);
utl_file.put_raw(Lv_file,utl_raw.cast_to_raw(P_SubstrVal));
P_offset:=P_offset+P_amount;
END LOOP;
End loop;
utl_file.put_raw(Lv_file,utl_raw.cast_to_raw('</wd:DATA>'));
UTL_FILE.fclose(Lv_file);
-- some more code
end;
我面临的问题是,有时生成的文件有一些丢失或额外的 XML 数据, - XML 的语法验证失败。示例: 错误示例图像 - XML 中的错误 - 由于标签不正确导致数据丢失
主要问题是,有时程序工作得很好,有时,某些文件有这种不正确的数据。
请告诉我这里的问题是什么,以及我们如何解决它...