Chinaunix首页 | 论坛 | 博客
  • 博客访问: 85733852
  • 博文数量: 19285
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196072
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19285)

文章存档

2012年(1)

2011年(1)

2009年(125)

2008年(19095)

2007年(63)

分类: DB2/Informix

2008-05-31 18:27:54

XML 发布

使用 Version 11,您能够将 SQL 语句结果发布为相应的 XML 格式。这可以通过 GenXML 库提供的函数完成。

函数

通常,共有两种类型函数:一类返回 LVARCHAR,另一类返回 CLOB。所有函数都可以处理 NULL 值和特殊字符。如果结果大于 LVARCHAR (32739),则使用 clob 版本的命令 —— genxmlclob,而不能使用 genxml

下面展示了所提供的函数:

  • genxml / genxmlclob
  • genxmlelem / genxmlelemclob
  • genxmlschema / genxmlschemaclob
  • genxmlquery / genxmlqueryclob
  • genxmlqueryhdr / genxmlqueryhdrclob
  • extract / extractxmlclob
  • extractvalue / extraxtxmlvalueclob
  • existsnode
  • idsxmlparse

genxml

genxml 将 SQL 结果行作为 XML 元素返回。您可以返回完整的行,也可以只返回单个列。在执行 order-by 之前准备结果集。如果需要按照正确的顺序执行,那么在对结果应用函数之前,必须使用导出表查询按照正确的顺序获得结果集。

一般语法为:

genxml (root_element, rows)

其中, root_element 表示所选择的表的名称或表列,而 rows 表示希望为 XML 元素赋予的名字。

假设按照以下方式定义表类:


清单 19. 表类定义
                    <
CREATE TABLE classes
(
classid integer,
class integer,
subject char(20)
);

insert into classes values (1, 125, "Chemistry");
insert into classes values (1, 250, "Physics");
insert into classes values (1, 375, "Mathematics");
insert into classes values (1, 500, "Biology");

Assume a table cds defined like this

create table cds
(
cdid integer,
artist char(30),
title char(30)
);

insert into cds values (1, "Madonna", "Like a Prayer");
insert into cds values (1, "The Beatles", "Let It Be");
insert into cds values (1, "Queen", "We Will Rock You");
insert into cds values (1, "Genesis", "Invisible Touch");

要从表中选择整个行,使用以下代码:


清单 20. 选择整行
                    
select genxml (cds, "cds") from cds;

genxml  
        
        
        

如果只选择 artist 列,使用以下语句:


清单 21. 选择 artist 列
                    
select genxml (row(artist), "artist") from cds;

genxml  
        
        
        

genxmlelem

genxml 相反,genxmlelem 的每个列值作为单独的元素返回,这与 genxml 的输出有所不同。


清单 22. genxmlelem 示例
                    
SELECT genxmlelem (cds, "cds") FROM cds;

genxmlelem  
            
            1
            Madonna                       
            Like a Prayer                 
            
            
            1
            The Beatles                   
            Let It Be                     
            
            
            1
            Queen                         
            We Will Rock You              
            
            
            1

            Genesis                       
            Invisible Touch               
            
            

genxmlschema

genxmlschemagenxml 相同,惟一的例外是它还返回 xml 模式。


清单 23. genxmlschema 示例
                    

SELECT genxmlschema (row(artist), "artist") FROM cds WHERE artist = 'Queen';

genxmlschema  
              xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
              targetNamespace="http://schemas.ibm.com/informix/2006/sqltypes"
              xmlns="http://schemas.ibm.com/informix/2006/sqltypes"
              ElementFormDefault="qualified">
              
                
                  
                    
                  
                
              
              
                
              
              Queen                         
              
              

genxmlquery

该函数将 SQL 查询作为参数并以 XML 格式返回结果。

一般语法为:

genxmlquery (row, query)

其中 row 表示给定 XML 结果的名称,而 query 表示将要执行的 SQL 查询。


清单 24. genxmlquery 示例
                    
execute function genxmlquery (' Titles from Queen ',
"SELECT * from cds WHERE artist = 'Queen'");

(expression)  
              
              1
              Queen                         
              We Will Rock You              
              
              

使用该函数,您还可以确保以想要的方式对数据进行收集。


清单 25. 另一个 genxmlquery 示例
                    
execute function genxmlquery ('cds', "SELECT * from cds order by artist");

(expression)  
              
              1
              Genesis                       
              Invisible Touch               
              
              
              1
              Madonna                       
              Like a Prayer                 
              
              
              1
              Queen                         
              We Will Rock You              
              
              
              1
              The Beatles                   
              Let It Be                     
              
              

				

genxmlqueryhdr

genxmlquery 基本相同,但是它包含了 XML 标题。

对于下一组函数,需要创建一个额外的 VP idsxmlvp。要创建该 vp,需要以用户 Informix 的身份执行以下命令:

onmode -p +1 idsxmlvp
				

之后,将在 online.log 中看到如下信息:

13:54:43  Dynamically added 1 idsxmlvp VP

如果该 vp 不存在,将看到下面的错误消息:

(-9799): ERROR: Routine execution VP switch failed

Extract

Extract 针对 XML 列、文档或字符串计算 XPATH 表达式。

Extractvalue

与 extract 相反,Extractvalue 将返回 XML 节点的值。

Existnode()

Extractvalue 可判断 XPath 是否至少产生一个 XML 元素。

Idsxmlparse

Extractvalue 在输入格式良好的情况下返回 XML 文档或片段。

阅读(2637) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~