如何逃避& Oracle查询中的字符

时间:2015-10-12 11:35:20

标签: sql oracle plsql

 SELECT DISTINCT ENTRY_GUID FROM 
       (SELECT e.ENTRY_GUID FROM alertwlnqedv3.ENTRY e,
                                 alertwlnqedv3.ENTRY_PARTNERDEFINED_INFO ep,
                                 alertwlnqedv3.PRODUCT p
        WHERE e.ENTRY_GUID = ep.ENTRY_GUID AND 
              e.PRODUCT_CODE = p.PRODUCT_CODE AND
             (XMLEXISTS('/partnerDefinedInfo/facetedIds/alertGroup[text()=
             ("Colleen&s Main Web2 QA Folder")]' PASSING PARTNERDEFINED_INFO) ) AND 
              e.STATUS_CODE != 13 AND 
              p.PRODUCT_VALUE =1)

我尝试运行上述查询 - 其中Colleen&s Main Web2 QA Folder是在运行时输入的文本。现在因为它允许特殊字符&查询正在破坏。我试图用\和另外一个&逃脱但仍然失败。请让我知道如何处理这种情况。 TIA。

3 个答案:

答案 0 :(得分:2)

尝试使用chr(38)代替&

SELECT DISTINCT ENTRY_GUID FROM 
       (SELECT e.ENTRY_GUID FROM alertwlnqedv3.ENTRY e,
                                 alertwlnqedv3.ENTRY_PARTNERDEFINED_INFO ep,
                                 alertwlnqedv3.PRODUCT p
        WHERE e.ENTRY_GUID = ep.ENTRY_GUID AND 
              e.PRODUCT_CODE = p.PRODUCT_CODE AND
             (XMLEXISTS(('/partnerDefinedInfo/facetedIds/alertGroup[text()=
             ("Colleen'||chr(38)||'s Main Web2 QA Folder")]') PASSING PARTNERDEFINED_INFO) ) AND 
              e.STATUS_CODE != 13 AND 
              p.PRODUCT_VALUE =1)

答案 1 :(得分:1)

只需使用此模式:

'text1&' || 'text2'

答案 2 :(得分:1)

在XPath表达式中使用该值时,需要使用XML实体转义&符号。因此,您需要使用&

替换输入字符串中的每个&

您还需要处理其他特殊的XML字符:

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