DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持
2009-11-11 00:00:00 来源:WEB开发网一个更精细的示例
现在考虑一个比较精细的场景,这个场景还要计算每个商品的保险费。为了让这个场景有点儿难度,保险费不但每天变动,而且随价格变化。这意味着,不但要向查询传递 customerid,还要传递保险费率。现在,假设您每天在保险公司提供的一个 Web 服务中查询最新的保险费率。保险费率信息采用 XML 文档的形式。
<insurance>
<rate price="100" currency="$" rate=".02"/>
<rate price="500" currency="$" rate=".018"/>
<rate price="" currency="$" rate=".015"/>
</insurance>
可以修改前面的存储过程来计算保险费。
清单 6. 计算每个商品的保险费的存储过程CREATE PROCEDURE customerItemsWithInsurance(IN custid varchar(12), rate XML)
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE c_cur CURSOR WITH RETURN FOR
values(xmlquery('
for $Customer in db2-fn:xmlcolumn( "CUSTOMER_TABLE.CUSTXML")/Customer
let $items:=(
<Items>{
for $Customer0 in db2-fn:xmlcolumn("PURCHASE_TABLE.ITEMXML")/Customer
let $insurance:=<insurance currency="{($rate//rate[@price=""]/@currency)}">
{(
if($Customer0/Item/@price > 500) then (
$Customer0/Item/@price * $rate//rate[@price=""]/@rate
)
else (
if($Customer0/Item/@price > 100) then (
$Customer0/Item/@price * $rate//rate[@price="500"]/@rate
)
else (
$Customer0/Item/@price * $rate//rate[@price="100"]/@rate
)
)
)}</insurance>
where $Customer0/@customerid= $Customer/@customerid
return
transform
copy $item:=$Customer0/Item
modify( do insert $insurance as last into $item)
return $item
}</Items>
)
where $Customer/@customerid= $customerid
return
transform
copy $cust:=$Customer
modify(do insert $items as last into $cust)
return $cust
' passing custid as "customerid", rate as "rate" ));
OPEN c_cur;
END
- ››db2 对float类型取char后显示科学计数法
- ››DB2中出现SQL1032N错误现象时的解决办法
- ››DB2 锁升级示例
- ››db2诊断系列之---定位锁等待问题
- ››db2 命令选项解释
- ››XML 转成 数组对象
- ››XML注意的转义字符
- ››xml文件正确性验证类实现
- ››DB2 最佳实践: 使用 DB2 pureXML 管理 XML 数据的...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
- ››DB2 9.5 SQL Procedure Developer 认证考试 735 准...
更多精彩
赞助商链接