DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第2部分
2010-02-16 14:59:32 来源:WEB开发网如果从DB2命令行执行 NEST_DIAGN 存储过程,将得到以下结果:
清单 11. 从DB2命令行执行 NEST_DIAGN 存储过程的结果
C:Program FilesIBMSQLLIBBIN>db2 call nest_diagn(?,?)
Value of output parameters
--------------------------
Parameter Name : RET_CODE1
Parameter Value : 2
Parameter Name : RET_CODE2
Parameter Value : 0
Return Status = 0
请注意,这里需要 DECLARE 一个变量,用于接受 DB2_RETURN_STATUS的值。
在存储过程之间共享数据
前面的例子展示了存储过程如何使用参数和RETURN语句来共享数据。现在,我们来看看 2个(或更多)存储过程如何共享来自同一个游标的相同的结果集。
过程result_from_cursor 从STAFF 和ORG 表获取某个特定部门的每个工人的姓名、工作描述、佣金和位置:
清单 12. 返回结果集的过程的例子
CREATE PROCEDURE result_from_cursor (deptin int)
DYNAMIC RESULT SETS 1
P1: BEGIN
-- Declare cursor
DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT a.name, a.job, COALESCE(a.comm,0), b.locatioN
FROM staff a, org b
where a.dept = b.deptnumb
AND a.dept = deptin;
OPEN cursor1;
END P1
例如,对于部门 51,可得到以下结果集:
清单 13.部门 51的结果集
NAME JOB COMMISSION LOCATION
--------- ----- --------------- -------------
Fraye Mgr 0.00 Dallas
Williams Sales 637.65 Dallas
Smith Sales 992.80 Dallas
Lundquist Clerk 189.65 Dallas
Wheeler Clerk 513.30 Dallas
现在,您想在另一个存储过程中使用来自这个存储过程的结果集(不是将它存储在临时或永久表中)。
DB2 允许一个外部存储过程使用来自一个内部存储过程的结果集。下面是相应的步骤:
使用以下语法声明一个结果集定位符:
DECLARE rs_locator_var1 RESULT_SET_LOCATOR VARYING;
将这个结果集定位符与调用者过程相关联:
ASSOCIATE RESULT SET LOCATOR( rs_locator_var1) WITH PROCEDURE proc_called;
分配从调用过程指向结果集的游标:
ALLOCATE cursor1 CURSOR FOR RESULT SET rs_locator_var1;
下面的例子演示了所有这些方法:
清单 14. 使用来自嵌套过程的结果集
CREATE PROCEDURE Use_nested_cursor (deptin int, OUT tot_dept_comm DEC(12,2))
BEGIN
DECLARE sqlcode int default 0;
DECLARE v_comm DECIMAL(12,2) DEFAULT 0.0;
DECLARE v_name, v_location varchar(20);
DECLARE v_job char(6);
DECLARE LOC1 RESULT_SET_LOCATOR VARYING;
SET tot_dept_comm = 0;
CALL result_from_cursor(deptin);
ASSOCIATE RESULT SET LOCATOR( LOC1) WITH PROCEDURE result_from_cursor;
ALLOCATE C1 CURSOR FOR RESULT SET LOC1;
FETCH FROM C1 INTO v_name,v_job,v_comm,v_location;
WHILE sqlcode = 0 DO
SET tot_dept_comm = tot_dept_comm + v_comm;
FETCH FROM C1 INTO v_name,v_job,v_comm,v_location;
END WHILE;
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表' (数...
更多精彩
赞助商链接