Мы начали сталкиваться с проблемой LPX-00209, когда недавно обновили нашу систему баз данных с Oracle llg до 12c. Я пытаюсь найти решение, почему я сейчас получаю сообщение об ошибке.
Я нашел, что может быть проблема ниже. Мы перешли на Oracle 12c и обнаружили, что l_xml.transform(XMLTYPE (l_xslt))
больше не работает в более поздних версиях Oracle. Ниже моя процедура, пытающаяся преобразовать XML с помощью таблицы стилей XSL. Есть ли другая функция, которую я могу использовать вместо l_xml.transform(XMLTYPE (l_xslt)). После преобразования XML он передает его обратно и пытается затем поместить этот XML в clob с помощью p_resulting_xml.getclobval()
и передать в процедуру write_file_email.
Ниже приведена документация поддержки Oracle, объясняющая проблему.
https://support.oracle.com/knowledge/Oracle%20Database%20Products/1642080_1.html
PROCEDURE end_workbook(p_report_clob IN OUT CLOB,
p_xml IN OUT XMLTYPE)
IS
l_xslt CLOB;
l_xml XMLTYPE;
BEGIN
Dbms_Lob.Writeappend(p_report_clob, 13, '</WORKSHEETS>');
l_xml := XMLTYPE(p_report_clob,NULL,0,1);
Dbms_Lob.Freetemporary (p_report_clob);
l_xslt := load_file('EXT_XSL_IN_DIR', 'ndu_sfich_report.xsl');
p_xml := l_xml.transform(XMLTYPE (l_xslt));
END end_workbook;
PROCEDURE write_file_email(p_filename IN VARCHAR2
,p_resulting_xml IN XMLTYPE
,p_first_visible_worksheet IN PLS_INTEGER DEFAULT 0)
IS
BEGIN
write_file (p_dir => pb_gen_report_dir -- VARCHAR2
,p_filename => p_filename -- VARCHAR2
,p_file => p_resulting_xml.getclobval() -- CLOB
,p_openmode => 'W' -- VARCHAR2
,p_first_visible_worksheet => p_first_visible_worksheet); --PLS_INTEGER
Сообщение об ошибке ниже
15:02:40 Error: ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 1
LPX-00209: PI names starting with XML are reserved
ORA-06512: at "SYS.XMLTYPE", line 138
ORA-06512: at "PRBLK.NDU_REPORTING", line 330
ORA-06512: at "PRBLK.NDU_SFICH_REPORTING", line 1299 ORA-06512: at line 1