我有一个查询导致我出现以下错误: ORA-19041:评论数据不能包含两个连续的' - '
SQL查询:
SELECT XMLElement("errorlist", fXML.cdata('ORA31011: XML parsing failed
ORA19213: error occurred in XML processing at lines 1
LPX00214: CDATA section did not end in "]]>"')) FROM dual;
在这段代码中,fXML.cdata是一个函数:
FUNCTION CData(ValueExpr VARCHAR2) RETURN XMLTYPE
IS BEGIN RETURN obj.fxml.CData(ValueExpr); END;
和obj.fxml.CData是一个TYPE:
FINAL STATIC FUNCTION CData(ValueExpr VARCHAR2) RETURN XMLTYPE,
即使我删除了" - "从传递的字符串中,它给了我同样的错误。
但是当我删除"]]>"时,它会正常处理。由于获取的数据存储在cdata中。 e.g:
<errorlist><![CDATA[ORA-31011: XML parsing failed
ORA-19213: error occurred in XML processing at lines 1
LPX-00214: CDATA section did not end in ]]></errorlist>
但我的约束是处理包含&#34;]]&gt;&#34;的数据。同样。
答案 0 :(得分:2)
没有看到你的类型函数正在做,这似乎归结为:
select XMLCData('ORA-31011: XML parsing failed
ORA19213: error occurred in XML processing at lines 1
LPX00214: CDATA section did not end in "]]>"')
from dual;
ORA-19041: Comment data cannot contain two consecutive '-'s
错误有些令人困惑,但鉴于您没有连续破折号并删除]]>
部分可以解决错误,似乎只是在不更改消息文本的情况下重复使用错误代码。 / p>
以下条件适用于XMLCData:
value_expr
不能包含子字符串]]
&gt;。
似乎没有办法逃避这一点;它是the specification的一部分。您必须修改传入的字符串,以便它不包含该字符序列 - 但您必须决定用什么来替换它们(如果有的话),并且消耗生成的XML / CData需要的任何东西要注意它,或者不在乎。
如果一个人最终会阅读它,那么用'期望值'替换它可能就足够了;或者你可以删除>
;或编码它,例如通过将其更改为>
(这听起来像是太多的黑客攻击);或添加空格以打破字符序列(这可能会令人困惑);或者对你的情况有意义的事情。
您还可以将其拆分为两个CDATA部分as suggested here;但这可能是你在你的类型函数中做的事情,而不是调用者必须知道的事情。但这又取决于它将如何被消费,以及是否会理解生成的XML。