2009-10-28 51 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');