新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > 数据库 > DB2教程 > 正文:利用DB2 9原生XML和PHP来简化XML应用程序

利用DB2 9原生XML和PHP来简化XML应用程序

新客网 XKER.COM 2006-08-27 来源: 收藏本文


$stmt = db2_prepare($conn, "SELECT XMLSERIALIZE(XMLQUERY($xquery' PASSING BY REF

T.PORDER AS \"t\" RETURNING SEQUENCE) AS CLOB(32K)) FROM

xmlporder AS t WHERE POid = ?");

db2_execute($stmt, array($id));

list($po) = db2_fetch_array($stmt);

echo $po;


还请注意,PHP 应用程序代码量达到最少,因为大部分业务逻辑和转换位于查询中。

非 XML RDBMS


  1. $stmt = db2_prepare($conn, "SELECT POrder FROM sqlporder WHERE POid = ?");

    db2_execute($stmt, array($id));

    $sum = 0.0;

    while(list($po) = db2_fetch_array($stmt)) {


  2. 因为采购订单存储为 CLOB,我们需要使用 DOM 访问每个产品及其数量和价格。使用简单 DOM 从采购订单中提取数据:



    $dom = simplexml_load_string($po);

    foreach($dom->items->item as $item) {

    $cpid = (string) $item[pid'];

    $price = (float) $item[price'];


  3. 跟踪 HTML 表每一行中的总价:



    $sum += $price * (integer) $item[quantity'];


  4. 需要进行单独查询来查找每个货品的名称。












    }

    }

    }


    $stmt2 = db2_prepare($conn, "SELECT Name FROM sqlproduct WHERE Pid = ?");

    db2_execute($stmt2, array($cpid));

    if($stmt2) {

    list($prodName) = db2_fetch_array($stmt2); ?>











    $



代码的关系版本向应用程序引入了较多的逻辑。

报告客户的订购历史记录

客户可以单击索引中的 Order history 链接,列出他们的所有采购订单:

图 10. 订购历史记录

订购历史记录

DB2 Viper
  1. 使用 SQL/XML 返回按日期排序的客户采购订单。对于每个采购订单,都将执行一个 XQuery,返回每个产品小计的格式化结果。



    $xquery =

    for $po in $t/purchaseOrder

    let $items := for $item in $po/items/item


  2. 在 XQuery 内执行联接以显示每个产品的名称,因为采购订单仅存储产品 ID、价格和数量:



    let $name := for $i in db2-fn:xmlcolumn("XMLPRODUCT.DESCRIPTION")/product

    where $i/@pid = $item/@pid return $i/description/name/text()

    return

    {xs:string($item/@quantity)} x @ ${xs:string($item/@price)} {$name}



    return



    Order #{xs:string($po/@id)} placed on {xs:string($po/@orderDate)}



    {$items}

    ;

    $stmt = db2_prepare($conn, "SELECT XMLSERIALIZE(XMLQUERY

    ($xquery' PASSING BY REF

    T.PORDER AS \"t\" RETURNING SEQUENCE) AS CLOB(32K))

    FROM xmlporder AS t

    ORDER BY POid DESC");

    db2_execute($stmt);

    while(list($po) = db2_fetch_array($stmt)) {

    echo $po; }


非 XML RDBMS
  1. 在关系版本中,必须执行一个查询来获取每个采购订单中产品的列表:



    $stmt = db2_prepare($conn, "SELECT POid, POrder FROM sqlporder

    ORDER BY POid DESC");

    db2_execute($stmt);

    while(list($POid, $po) = db2_fetch_array($stmt)) {


  2. 因为采购订单在关系数据库中存储为 CLOB,我们必须使用 DOM 访问订单日期和各个产品。PHP 5 的 SimpleXML 功能在此会再次派上用场。



    $dom = simplexml_load_string($po);

    ?>

    Order #

    placed on




    foreach($dom->items->item as $item) {


  3. 对于每个产品,必须查询详细信息,在本例中查询其名称:



    $stmt2 = db2_prepare($conn, "SELECT Name FROM sqlproduct WHERE Pid = ?");

    db2_execute($stmt2, array( (string) $item[pid'] ));

    while(list($prodName) = db2_fetch_array($stmt2)) {

    ?>

     x @ $ 




    }

    }

    }


XML 索引

虽然我们没有创建任何关系索引,但将创建一些 XML 索引来说明如何使用 DB2 原生 XML 支持从文档中的任何元素或属性创建索引。每个产品文档都有一个惟一产品 ID 以及浏览目录时常常使用的其他重要信息,包括种类、品牌和名称。对于产品 XML 列,将创建这四个索引。

收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐