DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第5部分
2010-02-18 15:01:11 来源:WEB开发网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 字符串用作输入参数
- ››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表' (数...
更多精彩
赞助商链接