在Oracle clob中搜索未转义的特殊字符

时间:2014-08-13 11:31:02

标签: sql oracle oracle11g

是否可以运行一个查询,该查询可以在Oracle clob中搜索包含&符号的任何记录,其中该字符所在的单词不是以下任何一个(或者可能是任何转义码):

 & - &
 < - &lt;
 > - &gt;
 " - &quot;
 ' - &apos;

我想在&符号前提取5个字符,在&符号后提取5个字符,这样我就能看到实际值。 基本上我想搜索包含这些字段的任何记录,并用转义码替换它。

目前我正在做这样的事情:

Select * from articles 
where dbms_lob.instr(article_summary , '&amp' ) = 0 and dbms_lob.instr(article_summary  , '&' )

更新

如果我要使用正则表达式,如果我想要检索值为&amp;的所有字段,我将如何指定它?其次是'a'以外的任何字符?

1 个答案:

答案 0 :(得分:1)

您可以使用DBMS_XMLGEN.CONVERT。第二个参数是可选的,如果省略则将转义XML特殊字符。

select DBMS_XMLGEN.CONVERT(article_summary)
  from articles;

但是,如果文章摘要包含转义和非转义字符的混合,那么这将给出错误的结果。解决问题的最简单方法是首先解除角色然后逃避它。

select DBMS_XMLGEN.CONVERT(
               DBMS_XMLGEN.CONVERT(article_summary,1)  --1 as parameter does unescaping
                          )
  from articles;