WEB开发网
开发学院数据库DB2 DB2 XML 编程,第 2 部分: 在应用程序体系结构中使... 阅读

DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持

 2009-11-11 00:00:00 来源:WEB开发网   
核心提示: 一个更精细的示例现在考虑一个比较精细的场景,这个场景还要计算每个商品的保险费,DB2 XML 编程,第 2 部分: 在应用程序体系结构中使用 XML 数据库支持(8),为了让这个场景有点儿难度,保险费不但每天变动,假设您每天在保险公司提供的一个 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 

上一页  3 4 5 6 7 8 9 10  下一页

Tags:DB XML 编程

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接