2013-07-05 181 views
1

我想在輸出中顯示特殊符號。 例如:我的文本可能包含實體代碼,如&lt;&gt;等等 我想在我的輸出中顯示爲<>。我需要在SQL中執行此操作。 我GOOGLE了這件事,有一個功能,HTML實體解碼爲特殊字符

select dbms_xmlgen.convert('ABC <; ',0) from dual

但這相反的過程,它的輸出爲「ABC <」

我與解碼嘗試,但它不工作。我甚至將sql命令更改爲: select dbms_xmlgen.convert('ABC <; ',1) from dual,其中1代表entity_decode,但我沒有得到所需的輸出。

+2

什麼輸出你得到,它有什麼問題?在11gR2中使用'0'進行編碼和'1'進行解碼似乎對我來說很好,取代了在PL/SQL之外似乎不可用的ENTITY_ENCODE和ENTITY_DECODE常量。 (我假設你實際上稱它爲'convert('ABC <',1)',而不是你所顯示的......) –

+0

從雙重選擇dbms_xmlgen.convert('ABC <;',1)是正在運行的SQL。 – user2552670

+0

這給了我'ABC <;',那是不是你想要的/期望,或者你有不同的東西? (希望這不僅僅是提示你爲'lt'賦值......如果真的應該現在已經提到...) –

回答

1

嘗試類似:

SELECT DBMS_XMLGEN.CONVERT('ABC &lt; ', DBMS_XMLGEN.ENTITY_DECODE) FROM DUAL 

此外,請參閱Oracle docs了點。

編輯:

好了,顯然這是在某些Oracle版本中的錯誤(9.2.0.1和10.1.0.2,因爲它似乎)。 Somebody solved it通過包裝功能。我不知道這應該如何解決它,但我值得嘗試。創建這樣的函數:

CREATE OR REPLACE FUNCTION 
    xml_decode(
     i_xml_string IN VARCHAR2 
    ) 
    RETURN VARCHAR2 
IS 
BEGIN 
    RETURN 
     DBMS_XMLGEN.convert(
     i_xml_string, 
     DBMS_XMLGEN.ENTITY_DECODE 
    ); 
END; 

而且用它來代替:

SELECT xml_decode('ABC &lt; ') FROM DUAL; 

讓我們知道,如果工程。

+0

是的,我試過這個,但是它顯示錯誤,因爲「ENTITY DECODE」是無效標識符 – user2552670

+0

即使使用'DBMS_XMLGEN.'前綴?我剛剛補充說。 – Aioros

+0

使用DBMS_XMLGEN,它顯示ENTITY DECODE不是一個過程,或者它是未定義的 – user2552670