2009-10-28 148 views
2

我在Oracle中從PL/SQL直接生成XML。從Oracle查詢XML中的字符串查詢

對於特殊字符和字符編碼,確保輸出的字符串符合XML的首選方式是什麼?

大部分XML文件都是靜態的,我們只需要輸出幾個字段的數據。

自己認爲不好的做法,例如:

DECLARE @s AS NVARCHAR(100) 
SELECT @s = 'Test chars = (<>, æøåÆØÅ)' 

SELECT '<?xml version="1.0" encoding="UTF-8"?>' 
     + '<root><foo>' 
     + @s 
     + '</foo></root>' AS XML 
+0

從你做什麼XML?如果您正在使用現有數據查看XMLGEN函數。 – 2009-10-28 18:38:15

+0

我傾向於同意在Oracle數據庫中使用T-SQL語法應該被認爲是不好的做法;) – APC 2009-10-29 03:07:10

+0

@APC:嘿,謝謝你的提示。 (是的,我是PL/SQL新手) – csl 2009-10-29 14:55:13

回答

2

有兩個很好的方法來生成我發現XML。一個是SYS.XMLDOM包,它本質上是Java DOM API的包裝。它有點笨重,因爲pl/sql沒有Java的多態功能,所以你必須不斷地向節點顯式地「轉換」元素,反之亦然,才能使用包中的方法。

最酷,國際海事組織,技術是使用的XMLElement等,SQL函數是這樣的:

SET SERVEROUTPUT ON SIZE 1000000; 
DECLARE 

    v_xml XMLTYPE; 

BEGIN 

    SELECT 
     XMLElement("dual", 
      XMLAttributes(dual.dummy AS "dummy") 
     ) 
    INTO 
     v_xml 
    FROM 
     dual; 

    dbms_output.put_line(v_xml.getStringVal()); 

END; 
/

如果你的XML結構不是很複雜,容易映射到你的表結構,那麼這可能是非常便利。

2

使用XmlElement,XmlAttribute ...是生成xml的最佳方法。
以下鏈接給出了所有功能的很好的介紹有:
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#ADXDB1620

如果你尋找一些更多的方式,看看這裏
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14259/xdb13gen.htm#sthref1486

Whatchout的編碼。如果您在客戶端會話中運行pl/sql程序或選擇生成xml。 xml使用客戶端代碼頁進行編碼。如果您在後臺作業(使用dbms_job或dbms_scheduler)中運行它,則會使用數據庫代碼頁進行編碼。

1
select dbms_xmlgen.getXML('select * from yourtable');