博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

Unix爱好者家园

卓越源代码  
   sdccf.cublog.cn
关于作者  
姓名:sdccf
职业:chinapost
年龄:36
位置:sd
个性介绍:

我的分类  




Informix IDS 11系统管理(918考试)认证指南,第8部分:面向管理员的SQL特性(8)

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  <cds cdid="1" artist="Madonna           " title="Like a Prayer         "/>
        <cds cdid="1" artist="The Beatles       " title="Let It Be             "/>
        <cds cdid="1" artist="Queen             " title="We Will Rock You      "/>
        <cds cdid="1" artist="Genesis           " title="Invisible Touch       "/>

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


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

genxml  <artist artist="Madonna                       "/>
        <artist artist="The Beatles                   "/>
        <artist artist="Queen                         "/>
        <artist artist="Genesis                       "/>

genxmlelem

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


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

genxmlelem  <cds>
            <row>
            <cdid>1</cdid>
            <artist>Madonna                       </artist>
            <title>Like a Prayer                 </title>
            </row>
            <row>
            <cdid>1</cdid>
            <artist>The Beatles                   </artist>
            <title>Let It Be                     </title>
            </row>
            <row>
            <cdid>1</cdid>
            <artist>Queen                         </artist>
            <title>We Will Rock You              </title>
            </row>
            <row>
            <cdid>1</cdid>

            <artist>Genesis                       </artist>
            <title>Invisible Touch               </title>
            </row>
            </cds>

genxmlschema

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


清单 23. genxmlschema 示例
                    

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

genxmlschema  <?xml version="1.0" encoding="en_US.819" ? >
              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">
              <xs:element name="artist">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="artist"  type="xs:char(30)"/ >
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
              </xs:schema>
                <artist>
              <row>
              <artist>Queen                         </artist>
              </row>
              </artist>

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)  <Titles from Queen>
              <row>
              <cdid>1</cdid>
              <artist>Queen                         </artist>
              <title>We Will Rock You              </title>
              </row>
              </Titles from Queen>

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


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

(expression)  <cds>
              <row>
              <cdid>1</cdid>
              <artist>Genesis                       </artist>
              <title>Invisible Touch               </title>
              </row>
              <row>
              <cdid>1</cdid>
              <artist>Madonna                       </artist>
              <title>Like a Prayer                 </title>
              </row>
              <row>
              <cdid>1</cdid>
              <artist>Queen                         </artist>
              <title>We Will Rock You              </title>
              </row>
              <row>
              <cdid>1</cdid>
              <artist>The Beatles                   </artist>
              <title>Let It Be                     </title>
              </row>
              </cds>

				

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 文档或片段。

 发表于: 2008-05-31,修改于: 2008-05-31 18:27 已浏览184次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.3565

京ICP证041476号