Oracle SQL中是否存在HTF.ESCAPE_SC的内置反函数?

时间:2016-10-27 10:09:26

标签: oracle plsql escaping

有一个PL / SQL函数HTF.ESCAPE_SC可以转义&&等特殊字符

示例:

SELECT HTF.ESCAPE_SC('<parameter name="port">48677</parameter>')
FROM dual;

&lt;parameter name=&quot;port&quot;&gt;48677&lt;/parameter&gt;

有人知道它的反函数吗?当然我可以跑

SELECT REPLACE(REPLACE(REPLACE(REPLACE(
    '&lt;parameter name=&quot;port&quot;&gt;48677&lt;/parameter&gt;', 
 '&lt;', '<'), '&gt;', '>'), '&quot;','"'), '&amp;','&')
FROM dual;

但我想知道是否有内置功能。<​​/ p>

3 个答案:

答案 0 :(得分:1)

我认为没有内置的功能。您可以编写一个小函数来防止对replace()的无法读取的一堆调用。

create or replace function unescape_sc(p_str in varchar2)
return varchar2
is
  l_str varchar2(2000) := p_str; -- adjust size as required
begin
  l_str := replace(l_str, '&amp;', '&');
  l_str := replace(l_str, '&gt;', '>');
  l_str := replace(l_str, '&lt;', '<');
  l_str := replace(l_str, '&quot;', '"');
  return l_str;
end unescape_sc;

select unescape_sc('&lt;parameter name=&quot;port&quot;&gt;48677&lt;/parameter&gt;')
from dual;

答案 1 :(得分:1)

我找到了这个功能:DBMS_XMLGEN.CONVERT 我做编码和解码。

SELECT DBMS_XMLGEN.CONVERT('Please encode &lt;this&gt; tag', 1) FROM dual;

Please encode <this> tag



SELECT DBMS_XMLGEN.CONVERT('Please decode <this> tag', 0) FROM dual;

Please decode &lt;this&gt; tag

答案 2 :(得分:1)

我发现了这个:

#include<stdio.h>

void main()
{
    int i,num,age;
    clrscr();
    printf("How many number do you have to enter "):
    scanf("%d",&num);
    for(i=0;i<num;i++)
    {
        printf("enter the age[%d]",i+1);
        scanf("%d",&age);
    }
    return();
}

输出是:

SELECT utl_i18n.unescape_reference ('&lt;parameter name=&quot;port&quot;&gt;48677&lt;/parameter&gt;')
FROM   dual