WEB开发网
开发学院数据库DB2 在 DB2 SQL 存储过程中使用 XML 阅读

在 DB2 SQL 存储过程中使用 XML

 2009-11-23 00:00:00 来源:WEB开发网   
核心提示: PASSING 子句XMLQUERY、XMLEXISTS 和 XMLTABLE 函数的 PASSING 子句可以传递多个变量,变量不必限于 XML 数据类型,在 DB2 SQL 存储过程中使用 XML(10),下两个示例演示两种有意义的操作, 清单 20. 测试属性值CREATEPROCEDUR

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 

上一页  5 6 7 8 9 10 

Tags:DB SQL 存储

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