【发布时间】:2017-05-21 22:20:41
【问题描述】:
我正在连接一些文本,但我收到了一个奇怪的错误,我找不到任何相关信息
UPDATE Table1 a
SET a.AllTexts = a.Text
|| a.Title
||
(SELECT XMLAGG(XMLELEMENT(E,"Text",',').EXTRACT('//text()')).GetClobVal()
FROM Table2 b
WHERE b.El_Id = a.Id
)
AllTexts 是CLOB,所有其他列是VARCHAR2
我明白了
Error report -
SQL Error: ORA-64451: Conversion of special character to escaped character failed.
64451. 00000 - "Conversion of special character to escaped character failed."
*Document: NO
*Cause: An attempt to convert a special character to an escaped character failed.
*Action: Remove the special character that cannot be escaped.
编辑:错误是由一些奇怪的符号引起的。问题是没有办法提前知道哪些符号会阻止执行
【问题讨论】:
-
尝试缩小问题范围。如果没有
WHERE子句,子查询本身是否可以正常运行? (这是“排查代码问题”的一个非常普遍的原则。) -
包含表中列的数据类型以及产生错误的样本数据(尽可能小)可能也会有所帮助。
-
添加了数据类型。我有一个巨大的表,我怎样才能捕获导致问题的数据?谢谢
-
我会假设只有一个“奇怪”的字符会弄乱查询(除非另有证明)。然后尝试找到有它的一行。例如,如果您有一个 id 列,我会尝试缩小范围 - 为这个 id 添加一个“where”子句,例如
where id between yyy and zzz- 并尝试找到尽可能窄的 id 范围仍然有相同的错误.在每一步,您都可以将其切成两半;这样做 20 次将使“可能的嫌疑人”减少 100 万倍,因此它可能是可控的。然后找出导致问题的确切字符。