將保單儲存在 DB2 中
PHP 應用程式將傳入的 XML 文檔直接儲存在資料庫中,而不需要解析它(見清單 3)。DB2 的 pureXML 支援將隱式地解析傳入的 XML,並將其儲存在一個類 DOM 的分層結構中。現在,可以在 XQuery 語句中使用 XPath 之類的 XML 導航技術(就像在 DOM 中使用的那樣)來查詢 XML。DB2 9 還提供了在該階層中的任何節點上索引的能力。
公開 XML 文檔上的服務
新的保單儲存在 DB2 9 中以後,保險代理可以查詢該保單,以決定是否接受這個保險。用於獲得關於新保單報告的查詢通過 Web 服務公開給客戶機應用程式。
這個例子中的 Web 服務是用 PHP 編寫的,它為調用實現服務的業務和轉換邏輯的 DB2 預存程序提供了一個簡潔的介面。每個 DB2 預存程序由一個 SQL/XML 查詢組成,它過濾和轉換儲存在資料庫中的 XML 保單,以建立一個輸出 XML 文檔。然後,該 PHP Web 服務將 XML 文檔返回給客戶機。
我們來分析每個預存程序,看看那些有效地組成 Web 服務實現的查詢。
列出所有新客戶保險的 DB2 查詢。包含該查詢的預存程序是listAllNewCustomers(見清單 4)。該查詢搜尋 ACORD 表的 INFO 列中的所有保單文檔。在每個 XML 文檔中,DB2 進一步向下分析,以便只返回 PolicyStatus/@tc 屬性的代碼值被設為 12(也就是建議的值)的那些文檔。查詢輸出是一個 XML 文檔,它有一個根節點 newpolicylist,該節點包含一系列的用於每個新保單的 TXLife 子節點(見圖 4)。
圖 4. 返回新保單列表的 SQL/XML 查詢
注意這個查詢第一次如何使用 DB2 XQuery 函數 db2-fn:xmlcolumn 來導航關係模式,以定位到 XML 列 DB2ADMIN.ACORD.INFO。當它到達 XML 列時,它進一步使用 XPath 在 XML 模式中導航到適當的節點(類似於使用 PHP、JavaScript 或其他語言導航 DOM)。 列出有風險客戶的提議保險的 DB2 查詢。該查詢只列出有風險的新客戶(也就是說,他們對於某個醫學問題的回答是 yes)。該查詢包含在一個名為 listAtRiskNewCustomers 的預存程序中(見清單 5)。 注意:WHERE 子句同時檢查答案和保單狀態。
評估有風險新客戶的風險度的 DB2 查詢。對於以上列表中的每個保單,在保單的健康風險地區只能列出回答為 yes 的問題。該查詢還返回 policytype,以顯示該保單值多少錢,以便評估風險。包含該查詢的預存程序(見清單 6)是 getRiskQuestions(guid)。 注意:您需要一個支援 XML 類型的 DB2 驅動程式版本。否則,在每個預存程序中都需要使用 XMLSerialize 來從 XMLQuery 中序列化 XML 值。請參閱 developerWorks 文章 “結合使用 DB2 原生 XML 與 PHP” 以獲得更詳細的資訊。