DB2培训文档.pptx
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RETURN v_return_code; END gen
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
调用者过程find_emp通过 get diagnostics取得被调用 者的返回值,get diagnostics 必须是紧跟在call语句之后
TIP:通过返回值判断 执行状态回结果集
存储过程中的结果集可以返回给别的存储过程,也可以返回 到客户端的应用程序。
定义游标的语法如下: declare <cursor-name> cursor [with hold] with return to caller [client] for <select statement> [stmt name]
IF ( v_total >= v_min ) THEN
SET p_bonus = 'Y'; ELSE
SET p_bonus = 'N'; END IF; END bn
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
✓传递参数
在存储过程嵌套调用过程中,参数依照出现的次序进行传递,如果数据类型不匹 配,请使用cast函数进行数据类型转换;
ELSEIF ( v_rc = 1000 ) THEN
SET p_output = 'The employee does not exist!';
ELSE
SET p_output = 'Something else went wrong.';
END IF;
END fe
--(1) --(2)
© 2006 IBM公司
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
CREATE PROCEDURE get_emp_name ( IN p_empno CHAR(6) , out p_fname VARCHAR(10) )
LANGUAGE SQL SPECIFIC get_emp_name gen: BEGIN -- Declare variables DECLARE v_return_code INT DEFAULT 99;
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
简单的存储过程嵌套的例子
被调用的过程:统计每个雇员所完成的项目 CREATE PROCEDURE count_projects ( IN p_empno CHAR(6)
, out p_total INT ) LANGUAGE SQL SPECIFIC count_projects
IBM软件部
嵌套存储过程
陆川 luchuan@ 021-63262288-2720
© 2007 IBM 公司
IBM 软件部 | DB2 信息管理软件
你将了解下列内容:
✓什么是嵌套存储过程 ✓如何在嵌套存储过程间传递参数 ✓从嵌套存储过程中返回值 ✓从嵌套存储过程中返回和接收结果集 ✓如何递归调用存储过程 ✓过程调用的安全性考虑
-- Declare condition handlers DECLARE CONTINUE HANDLER FOR NOT FOUND
SET v_return_code = 1000;
-- Procedure logic SELECT firstnme INTO p_fname FROM employee WHERE empno = p_empno;
CREATE PROCEDURE find_emp ( IN p_empno CHAR(6)
, out p_output VARCHAR(50) )
LANGUAGE SQL
SPECIFIC find_emp
fe: BEGIN
-- Declare variables
DECLARE v_rc INT;
DECLARE v_fname VARCHAR(15);
•返回结果集到客户端 下面的过程将返回结果集到客户端,返回的结果集是特定部门下的雇员的 first name、last name和salary。
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
CREATE PROCEDURE to_client ( IN p_dept CHAR(3) ) LANGUAGE SQL SPECIFIC to_client DYNAMIC RESULT SETS 1
cp: BEGIN -- Procedure logic SELECT COUNT(*) INTO p_total FROM emp_act WHERE empno = p_empno;
END cp
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
调用者:根据每个雇员完成的项目的情况,决定是否给发奖金 CREATE PROCEDURE bonus ( IN p_empno CHAR(6)
✓从嵌套的过程中取得返回值
除了通过输出参数获得返回值以外,存储过程可以通过return语句返回一个值,下 面的例子演示如何通过get diagnostics语句获得被调用过程的返回值。 下面的过程get_emp_name将基于雇员编号返回雇员的first name,当找到该雇员时返回 99,否则返回1000。
-- Procedure logic
CALL get_emp_name( p_empno, v_fname );
GET DIAGNOSTICS v_rc = RETURN_STATUS;
IF ( v_rc = 99 )
THEN
SET p_output = 'The employee is: ' || v_fname || '.';
, out p_bonus CHAR(1) ) LANGUAGE SQL SPECIFIC bonus bn: BEGIN -- Declare variables DECLARE v_min INT DEFAULT 5; DECLARE v_total INT DEFAULT 0;
-- Procedure logic CALL count_projects(p_empno, v_total);
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
调用者过程find_emp通过 get diagnostics取得被调用 者的返回值,get diagnostics 必须是紧跟在call语句之后
TIP:通过返回值判断 执行状态回结果集
存储过程中的结果集可以返回给别的存储过程,也可以返回 到客户端的应用程序。
定义游标的语法如下: declare <cursor-name> cursor [with hold] with return to caller [client] for <select statement> [stmt name]
IF ( v_total >= v_min ) THEN
SET p_bonus = 'Y'; ELSE
SET p_bonus = 'N'; END IF; END bn
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
✓传递参数
在存储过程嵌套调用过程中,参数依照出现的次序进行传递,如果数据类型不匹 配,请使用cast函数进行数据类型转换;
ELSEIF ( v_rc = 1000 ) THEN
SET p_output = 'The employee does not exist!';
ELSE
SET p_output = 'Something else went wrong.';
END IF;
END fe
--(1) --(2)
© 2006 IBM公司
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
CREATE PROCEDURE get_emp_name ( IN p_empno CHAR(6) , out p_fname VARCHAR(10) )
LANGUAGE SQL SPECIFIC get_emp_name gen: BEGIN -- Declare variables DECLARE v_return_code INT DEFAULT 99;
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
简单的存储过程嵌套的例子
被调用的过程:统计每个雇员所完成的项目 CREATE PROCEDURE count_projects ( IN p_empno CHAR(6)
, out p_total INT ) LANGUAGE SQL SPECIFIC count_projects
IBM软件部
嵌套存储过程
陆川 luchuan@ 021-63262288-2720
© 2007 IBM 公司
IBM 软件部 | DB2 信息管理软件
你将了解下列内容:
✓什么是嵌套存储过程 ✓如何在嵌套存储过程间传递参数 ✓从嵌套存储过程中返回值 ✓从嵌套存储过程中返回和接收结果集 ✓如何递归调用存储过程 ✓过程调用的安全性考虑
-- Declare condition handlers DECLARE CONTINUE HANDLER FOR NOT FOUND
SET v_return_code = 1000;
-- Procedure logic SELECT firstnme INTO p_fname FROM employee WHERE empno = p_empno;
CREATE PROCEDURE find_emp ( IN p_empno CHAR(6)
, out p_output VARCHAR(50) )
LANGUAGE SQL
SPECIFIC find_emp
fe: BEGIN
-- Declare variables
DECLARE v_rc INT;
DECLARE v_fname VARCHAR(15);
•返回结果集到客户端 下面的过程将返回结果集到客户端,返回的结果集是特定部门下的雇员的 first name、last name和salary。
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
CREATE PROCEDURE to_client ( IN p_dept CHAR(3) ) LANGUAGE SQL SPECIFIC to_client DYNAMIC RESULT SETS 1
cp: BEGIN -- Procedure logic SELECT COUNT(*) INTO p_total FROM emp_act WHERE empno = p_empno;
END cp
© 2006 IBM公司
IBM 软件部 | DB2 信息管理软件
调用者:根据每个雇员完成的项目的情况,决定是否给发奖金 CREATE PROCEDURE bonus ( IN p_empno CHAR(6)
✓从嵌套的过程中取得返回值
除了通过输出参数获得返回值以外,存储过程可以通过return语句返回一个值,下 面的例子演示如何通过get diagnostics语句获得被调用过程的返回值。 下面的过程get_emp_name将基于雇员编号返回雇员的first name,当找到该雇员时返回 99,否则返回1000。
-- Procedure logic
CALL get_emp_name( p_empno, v_fname );
GET DIAGNOSTICS v_rc = RETURN_STATUS;
IF ( v_rc = 99 )
THEN
SET p_output = 'The employee is: ' || v_fname || '.';
, out p_bonus CHAR(1) ) LANGUAGE SQL SPECIFIC bonus bn: BEGIN -- Declare variables DECLARE v_min INT DEFAULT 5; DECLARE v_total INT DEFAULT 0;
-- Procedure logic CALL count_projects(p_empno, v_total);