ORA-19043: Multiply nested XMLROOT function disallowed

文档解释

ORA-19043: Multiply nested XMLROOT function disallowed

Cause: An XMLROOT function has an operand that is also an XMLROOT function.

Action: Modify the query so that there are no multiply nested XMLROOT functions.

ORA-19043 错误表明您尝试将两个 (或多个) 层次的 XMLROOT 函数嵌套在一起,这是不允许的。XMLROOT 函数将结果转换为 XML 类型,并允许您为隐式的 XML 根元素指定名称及命名空间。

官方解释

XMLROOT 的目的是让给定的 XML 结果有一个XML 元素作为其顶点。每个根元素有且只有一个文档元素。任何尝试使用嵌套的 XMLROOT 函数都会导致ORA-19043 操作层次错误。

常见案例

一个常见的错误案例是尝试在查询的结果上进行嵌套的调用的时候发生。例如:

SELECT XMLROOT(

XMLROOT(

XMLTYPE(‘JohnSmith)

, VERSION ‘1.0’

)

)

FROM DUAL;

上面的语句将会导致 ORA-19043 错误。

一般处理方法及步骤

ORA-19043 错误可以通过添加另一个 SQL 语句或者使用 XMLTABLE 来避免。

例如,如果您想从XML提取 Person 元素:

SELECT XMLROOT (

XMLTYPE(

XMLEXTRACT(V_XML_DOC, ‘/Document/Person’)

)

, VERSION ‘1.0’

)

FROM DUAL;

或者可以使用 XMLTABLE:

SELECT X.*

FROM DUAL,

XMLTABLE(

‘/Document/Person’

PASSING XMLTYPE(V_XML_DOC)

COLUMNS FIRSTNAME VARCHAR2(4000) PATH ‘firstname’,

LASTNAME VARCHAR2(4000) PATH ‘lastname’

) X

你可能感兴趣的