WEB开发网
开发学院数据库DB2 DB2 9.5 SQL Procedure Developer 认证考试 735 准... 阅读

DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第5部分

 2010-02-18 15:01:11 来源:WEB开发网   
核心提示:DB2_RETURN_STATUS返回调用的SQL过程的状态值,如果调用的过程成功执行,DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第5部分(5),它会返回零值,否则返回表示失败的正值,下面的存储过程返回的结果集包含一个关系列和来自 XML 列的属性(客户名):清单 14.

DB2_RETURN_STATUS返回调用的SQL过程的状态值。如果调用的过程成功执行,它会返回零值,否则返回表示失败的正值。

清单 12. 通过 GET DIAGNOSTICS 语句获取状态值

CREATE PROCEDURE myproc1 ()
  A1:BEGIN
  DECLARE RETVAL INTEGER DEFAULT 0;
  …
CALL MYPROC2;
  GET DIAGNOSTICS RETVAL = DB2_RETURN_STATUS;
  IF RETVAL <> 0 THEN
    …
    LEAVE A1;
  ELSE
    …
  END IF;
  END A1

保存点

保存点提供一种在工作单元(事务)内实现子事务的方法。实现的办法是在事务内创建多个以后可以引用的引用点(保存点)。例如,在一个应用程序中,可以设置多个保存点;在创建保存点之后的任何时候,都可以把工作回滚到保存点,而不影响在此保存点之前执行的任何工作。

下面是设置保存点的语法:

SAVEPOINT savepoint-name ON ROLLBACK RETAIN CURSORS

下面给出一个对嵌套的保存点执行回滚操作的示例。首先,创建一个名为 T1 的表。然后,在 T1 表中插入一行。执行插入之后,创建第一个保存点 (SAVEPOINT1)。创建这个保存点之后,在 T1 表中插入另一行并创建另一个保存点 (SAVEPOINT2)。然后,在 T1 表中插入第三行。然后,创建最后一个保存点 (SAVEPOINTS3)。最后,在 SAVEPOINT3 后面插入另一行。现在,在 T1 表中有四行(‘A’、‘B’、‘C’ 和 ‘D’)。

现在,回滚到 savepoint3,这会从 T1 表中删除 ‘D’ 行。接下来,回滚到 savepoint1,这会删除 ‘C’ 和 ‘B’ 行。然后,提交事务,这会导致保存点不再可用。然后,在 T1 表中插入 ‘E’ 行。现在,在 T1 表中有两行(‘A’ 和 ‘E’)。

清单 13 给出实现这些操作的命令。

清单 13. 使用保存点

CREATE PROCEDURE p1()
BEGIN
 CREATE TABLE T1 (C1 CHAR);

 INSERT INTO T1 VALUES ('A');
 SAVEPOINT SAVEPOINT1 ON ROLLBACK RETAIN CURSORS;
 INSERT INTO T1 VALUES ('B');
 SAVEPOINT SAVEPOINT2 ON ROLLBACK RETAIN CURSORS;
 INSERT INTO T1 VALUES ('C');
 SAVEPOINT SAVEPOINT3 ON ROLLBACK RETAIN CURSORS;
 INSERT INTO T1 VALUES ('D');
 ROLLBACK TO SAVEPOINT SAVEPOINT3;
 ROLLBACK TO SAVEPOINT SAVEPOINT1;
COMMIT WORK;

 INSERT INTO T1 VALUES ('E');

END_cnnew1@

PureXML 和存储过程

DB2 9.5 是一种混合型数据库,它支持 XML 数据类型的列以及用于操作 XML 数据的方法和函数。SQL过程支持 XML 数据类型的参数和变量。这些变量还可以作为参数传递给 XMLEXISTS、XMLQUERY 和 XMLTABLE 表达式中的XQuery 表达式。

下面的存储过程返回的结果集包含一个关系列和来自 XML 列的属性(客户名):

清单 14. 存储过程示例

CREATE PROCEDURE proc_wXML ( )
DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
-- Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT cid, xmlquery('declare default element namespace 
        "http://posample.org";
      $cu/customerinfo/name/text()' passing d.info as "cu")
   from customer d;
-- Cursor left open for client application
OPEN cursor1;
END P1
The next procedure is accepting XML as input variable along with integer parameter
and inset row into CUSTOMER table that has INFO column declared as XML:
CREATE PROCEDURE PROC_INS_XML1 ( v_cid int, v_info XML)
DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
INSERT INTO CUSTOMER (CID, INFO)
 VALUES (v_cid, v_info);
END P1

如果使用IBM Data Studio 运行此过程,可以把 XML 直接解析为输入值,见图 2。

图 2. XML 字符串用作输入参数

上一页  1 2 3 4 5 

Tags:DB SQL Procedure

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