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