DB2中,如何在一个存储过程中调用另一个存储过程,并得到另一个存储过程的返回值???

sunqcn 2007-04-29 04:27:39
加精
如题
...全文
2144 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
liyan93834183 2011-04-13
  • 打赏
  • 举报
回复
推荐一下
orangeh8 2011-04-06
  • 打赏
  • 举报
回复
db2数据库中现在有a和b两个存储过程,a和b过程都有自己的事务,当a过程调用b过程的时候,a过程首先自己开了事务,b过程中的事务可以用a的事务吗?
knowledge_Is_Life 2008-05-01
  • 打赏
  • 举报
回复
都是很好的建议! 值得学习
lsj19830812 2007-10-10
  • 打赏
  • 举报
回复
mark
will125love 2007-09-30
  • 打赏
  • 举报
回复
upup
王帆 2007-09-30
  • 打赏
  • 举报
回复
很有帮助,非常感谢!
littleboys 2007-07-05
  • 打赏
  • 举报
回复
例子:
CREATE PROCEDURE PROC1(INOUT data1 SMALLINT)
DYNAMIC RESULT SETS 2 LANGUAGE SQL
BEGIN
DECLARE c1 CURSOR WITH RETURN TO CALLER FOR
SELECT name,dept FROM staff WHERE salary>data1;
DECLARE c2 CURSOR WITH RETURN TO CALLER FOR
SELECT name,dept FROM staff WHERE salary<=data1;
OPEN c1;
OPEN c2;
END@



CREATE PROCEDURE Caller_Proc1 ( INOUT data1 SMALLINT)
LANGUAGE SQL
BEGIN
DECLARE result1 RESULT_SET_LOCATOR VARYING;
DECLARE result2 RESULT_SET_LOCATOR VARYING;
DECLARE name_result VARCHAR(9);
DECLARE dept_result SMALLINT;
DECLARE RESULT_SET_END SMALLINT;
DECLARE END_OF_RECORD SMALLINT;
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET RESULT_SET_END=1;
SET name_result = 'LAST';
SET dept_result = 999;
END;
SET RESULT_SET_END = 0;
CALL proc1(data1);
ASSOCIATE RESULT SET LOCATORS (result1 , result2)
WITH PROCEDURE proc1;
ALLOCATE callC1 CURSOR FOR RESULT SET result1;
Begin
delete from result;
end;
WHILE (RESULT_SET_END = 0 ) DO

FETCH FROM callC1 INTO name_result , dept_result;
IF ( RESULT_SET_END = 0 ) THEN
BEGIN
INSERT INTO result
VALUES (name_result , dept_result , current timestamp);
END;
END IF;
END WHILE;
SET RESULT_SET_END = 0;
ALLOCATE callC2 CURSOR FOR RESULT SET result2;
Begin
delete from result2;
end;
WHILE (RESULT_SET_END = 0 ) DO
FETCH FROM callC2 INTO name_result , dept_result;
IF ( RESULT_SET_END = 0 ) THEN
BEGIN
INSERT INTO result2
VALUES (name_result , dept_result , current timestamp);
END;
END IF;
END WHILE;
--CLOSE result1;
--CLOSE result2;
END@


shijubo 2007-06-04
  • 打赏
  • 举报
回复
如果需要返回的结果集或值赋给procedure2中的某个变量,把procedure1定义成函数会方便些。然后就可以像在SQL中使用函数一样,在procedure2中使用这个函数。
上面这种情况,我都是使用的函数,未使用过存储过程。
欢迎加入新群DB2 DBA:10300864。
fengyunleo 2007-04-30
  • 打赏
  • 举报
回复
在procedure_name这个存储过程中CREATE PROCEDURE procedure_name ( )
DYNAMIC RESULT SETS num
fengyunleo 2007-04-30
  • 打赏
  • 举报
回复
call procedure_name就行了
再procedure_name 中定义输出变量。
sunqcn 2007-04-30
  • 打赏
  • 举报
回复
sorry,

================================
...
则在procedure2中,
若写
call procedure1;

那么怎么把返回的结果集或值赋给procedure2中的某个变量?
...
================================

sunqcn 2007-04-30
  • 打赏
  • 举报
回复
我还不是太明白,比如有procedure1和procedure2, 我想在procdure2中调用procedure1,

则在procedure2中,
若写
call procedure_name;

那么怎么把返回的结果集或值赋给procedure2中的某个变量?

如果能给一个操作sample数据库的简单例子就太好了。

万分感谢!

5,889

社区成员

发帖
与我相关
我的任务
社区描述
IBM DB2 是美国IBM公司开发的一套关系型数据库管理系统,它主要的运行环境为UNIX(包括IBM自家的AIX)、Linux、IBM i(旧称OS/400)、z/OS,以及Windows服务器版本
社区管理员
  • DB2
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧