LPX-00209:保留以XML开头的PI名称XMLTYPE.transform

LPX-00209:保留以XML开头的PI名称XMLTYPE.transform,xml,plsql,oracle12c,clob,xmltype,Xml,Plsql,Oracle12c,Clob,Xmltype,当我们最近将数据库系统从Oracle llg升级到12c时,我们开始遇到LPX-00209问题。我正试图找到解决为什么我现在会出错的方法 我发现了下面可能存在的问题。我们转到Oracle 12c,发现l_xml.transformXMLTYPE l_xslt在Oracle的更高版本中不再有效。下面是我尝试使用XSL样式表转换XML的过程。是否有其他函数可以替代l_xml.transformXMLTYPE l_xslt。转换完XML后,它会将其传回,然后尝试使用p_resulting_XML.ge

当我们最近将数据库系统从Oracle llg升级到12c时,我们开始遇到LPX-00209问题。我正试图找到解决为什么我现在会出错的方法

我发现了下面可能存在的问题。我们转到Oracle 12c,发现l_xml.transformXMLTYPE l_xslt在Oracle的更高版本中不再有效。下面是我尝试使用XSL样式表转换XML的过程。是否有其他函数可以替代l_xml.transformXMLTYPE l_xslt。转换完XML后,它会将其传回,然后尝试使用p_resulting_XML.getclobval将此XML放入clob,并传递到过程write_file_email

下面的Oracle支持文档解释了该问题


确保生成的XML只有一个XML声明,如果有,则只显示在XML文档的最顶端。您的错误消息听起来好像遇到了第二个XML声明,并被解释为PI。

除非您从oracle获得修补程序,否则l_XML.transform在更高版本的oracle(即12c)中不起作用

解决方法如下所示。您可以将其作为PL/SQL中的execute immediate语句,也可以将其放在错误发生位置附近的SQL中

ALTER SESSION SET sql_trace = true;
ALTER SESSION SET EVENTS='31151 trace name context forever, level 0x40000'; 

谢谢Shaun,我理解这一点,但首先我需要查看XML,看看是否是这种情况,所以我需要将其转换为varchar2,这样我就可以输出XML来查看它。将其视为文本,而不是XML,直到您能够解决此问题,因为如果格式不正确,它就不是XML。
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
ALTER SESSION SET sql_trace = true;
ALTER SESSION SET EVENTS='31151 trace name context forever, level 0x40000';