2016-10-27 10 views
2

&Oracle SQLにHTF.ESCAPE_SCのビルドイン逆関数がありますか?

&へなどの特殊文字をエスケープする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; 

しかし、私は組み込み関数があるのだろうかと思います。

答えて

1

I機能が見つかりました:DBMS_XMLGEN.CONVERT Iが符号化および復号化を行います。私は、この発見

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 
+0

んが、それはないん。 'SELECT dbms_xmlgen.convert( ' >タグをエンコードしてください')FROM dual'は、' Please encode & lt; this & gt;を出力します。 tag'(Oracle 12c) – cartbeforehorse

+0

@cartbeforehorse、ドキュメント(または私の更新) –

+0

Ahを読んでください。十分に公正:-) – cartbeforehorse

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

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

出力は次のとおりです。

<parameter name="port">48677</parameter> 
+1

あなたの要件によって異なります。 'HTF.ESCAPE_SC'は'& "< >'のみをエスケープしますが、 'utl_i18n.unescape_reference'はより多くの文字列をエスケープします(ドキュメンテーションを参照)ので、' HTF.ESCAPE_SC'の**逆関数**ではありません。 –

関連する問題