在 DB2 SQL 存储过程中使用 XML
2009-11-23 00:00:00 来源:WEB开发网PASSING 子句
XMLQUERY、XMLEXISTS 和 XMLTABLE 函数的 PASSING 子句可以传递多个变量。变量不必限于 XML 数据类型。下两个示例演示两种有意义的操作。
清单 20. 测试属性值
CREATE PROCEDURE ex_proc
(
IN inpdoc XML,
IN search VARCHAR(20),
OUT id VARCHAR(30)
)
LANGUAGE SQL
NO EXTERNAL ACTION
BEGIN
SET id =
XMLCAST(
XMLQUERY('$d/customers/customer[@id=$a]/name' PASSING inpdoc AS "d",
search AS "a"
)
AS VARCHAR(30)
)
;
END
另一个示例演示如何使用 XMLQUERY(和其他 SQL/XML 函数)的 PASSING 子句。如果需要编写泛型代码以便访问以各种方式进行格式化的 XML 数据,那么可以根据位置(第一个、第二个、第三个等等)访问节点和属性。
输入参数 “inpdoc” 的示例数据
清单 21. 根据位置提取节点和属性 —— 输入数据
<order id="333" status="open">
<customer>
<custid>11029></custid>
<name>Johnny Depp</name>
<city>Hollywood</city>
</customer>
</order>
清单 22. 根据位置提取节点和属性
CREATE PROCEDURE ex_proc
(
IN inpdoc XML,
IN attrpos INT,
OUT attrname VARCHAR(30),
OUT attrvalue VARCHAR(30),
IN nodepos INT,
OUT nodename VARCHAR(30),
OUT nodevalue VARCHAR(30)
)
LANGUAGE SQL
NO EXTERNAL ACTION
BEGIN
VALUES
(
XMLCAST(
XMLQUERY('$d/order/@*[$a]/name()' PASSING inpdoc AS "d", attrpos AS "a")
AS VARCHAR(30)
),
XMLCAST(
XMLQUERY('$d/order/@*[$a]' PASSING inpdoc AS "d", attrpos AS "a")
AS VARCHAR(30)
),
XMLCAST(
XMLQUERY('$d/order/customer/*[$n]/name()' PASSING inpdoc AS "d", nodepos AS "n")
AS VARCHAR(30)
),
XMLCAST(
XMLQUERY('$d/order/customer/*[$n]' PASSING inpdoc AS "d", nodepos AS "n")
AS VARCHAR(30)
)
)
INTO
attrname,
attrvalue,
nodename,
nodevalue
;
END
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接