本文展示了通过 RPG 来使用 IBM DB2 for i 7.1 提供的 SQL/XML 函数的几个示例。文中展示了如何将 SQL 语句嵌入 RPG 程序,从而执行涉及 XML 数据的关系查询并生成 XML 结果。本文中演示了 SQL/XML 发布函数和近期发布的 XMLTABLE 函数。
对于任何企业来说,应用程序的现代化和 Web 支持都是极为重要的目标,但这同时也带来了一些挑战。通常,这些企业希望把 IT 资源的重心放在改进过去使用成功的基础架构,而不是编写全新的应用程序。在 IBM i 平台上,现代化通常意味着把RPG编写的应用程序改成基于Web的应用。由于目前存在大量通过 Web 传输数据的 XML 标准,因此在 RPG 中提供 XML 功能至关重要。RPG 程序员必须认识到,DB2 for i 引入的原生 XML 数据类型,为支持嵌入式 SQL(包括 RPG)各种编程语言提供了一整套全新的选择来同时处理 XML 和传统数据。
在关系查询中使用来自 XML 文档的数据
假设我有一个应用程序,用它在关系数据库表中跟踪客户订单。为了完成这项任务,我需要使用 SQL 在模式 (RPG_ORDERS) 中创建以下 ORDERS 表,并在其中插入一些记录:
清单 1. SQL 创建和插入语句
CREATE TABLE rpg_orders.orders( order_id BIGINT GENERATED ALWAYS AS IDENTITY( START WITH 1000 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE NO ORDER CACHE 20 ), Cust_email VARCHAR(50), Order_ts TIMESTAMP , Product VARCHAR(50) CCSID 37, Price DOUBLE PRECISION , PRIMARY KEY(order_id) ) ; INSERT INTO rpg_orders.orders (cust_email, order_ts, product, price) VALUES ('ntl@us..com', '2012-04-15 13:00:00', 'Camera', 999.50 ), ('ntl@us..com', '2012-04-16 12:00:00', 'lens', 500.25), ('ntl@us.ibm.com', '2012-04-01 11:00:00', 'Book', 15.00), ('george@nowhere.com', '2012-04-15 13:05:00', 'Book', 20) ;
对于请求为拥有匹配的电子邮件地址并在指定时间段内完成的订单生成一个报告的程序,这个基于 Web 的应用程序将提供一个 XML 文档。
清单 2 给出了一个示例请求文档。
清单 2. 信息请求文档示例
<?xml version="1.0" encoding="UTF-8" ?> <orderinforequest> <custemail>ntl@us.ibm.com</custemail> <mints> 2012-04-14T:00:00:00 </mints> <maxts> 2012-04-30T23:59:59 </maxts> </orderinforequest>
我的第一个 RPG 程序从文件中检索一个 XML 信息请求,并用它在假脱机文件中生成了一个报告。可以假设我们正在从标准输出或套接字中读取此数据 —— 但为保持示例的简洁,流文件便足以阐述相关概念。