【问题标题】:ORA-64451: Conversion of special character to escaped character failedORA-64451: 将特殊字符转换为转义字符失败
【发布时间】: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 万倍,因此它可能是可控的。然后找出导致问题的确切字符。

标签: oracle oracle12c


【解决方案1】:

我收到了这个错误代码,这对我有用

REGEXP_REPLACE(COLUMN, '[^[:print:]]', '') 

【讨论】:

  • 这很有帮助,但我还必须将列包装在 REPLACE(REPLACE(REPLACE(REPLACE(text,CHR(47)),CHR(42)),CHR(64)),CHR (38)) 让它工作。没有测试哪一个可以解决问题,但是对于我的问题,需要您的正则表达式替换和这个特定的字符替换,只是有一个不起作用。这些字符是 / (47)、* (42)、@ (64) 和 & (38)。
  • 那是做什么的?它什么都没有替换每个不可打印的字符? :print: 是什么意思?
猜你喜欢
  • 2020-06-04
  • 1970-01-01
  • 2015-04-28
  • 2013-03-08
  • 2012-11-20
  • 1970-01-01
  • 2015-02-20
  • 2019-02-17
  • 2013-05-02
相关资源
最近更新 更多