版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 IBM软件部 2007 IBM 公司嵌套存储过程陆川陆2720021-63262288-2720IBM 软件部 | DB2 信息管理软件 2006 IBM公司你将了解下列内容:什么是嵌套存储过程如何在嵌套存储过程间传递参数从嵌套存储过程中返回值从嵌套存储过程中返回和接收结果集如何递归调用存储过程过程调用的安全性考虑IBM 软件部 | DB2 信息管理软件 2006 IBM公司 被调用的过程:统计每个雇员所完成的项目CREATE PROCEDURE count_projects ( IN p_empno CHAR(6) , out p_total INT ) LAN
2、GUAGE SQL SPECIFIC count_projects cp: BEGIN - Procedure logic SELECT COUNT(*) INTO p_total FROM emp_act WHERE empno = p_empno;END cp简单的存储过程嵌套的例子IBM 软件部 | DB2 信息管理软件 2006 IBM公司调用者:根据每个雇员完成的项目的情况,决定是否给发奖金CREATE PROCEDURE bonus ( IN p_empno CHAR(6) , out p_bonus CHAR(1) ) LANGUAGE SQL SPECIFIC bonus bn
3、: BEGIN - Declare variables DECLARE v_min INT DEFAULT 5; DECLARE v_total INT DEFAULT 0; - Procedure logic CALL count_projects(p_empno, v_total); IF ( v_total = v_min ) THEN SET p_bonus = Y; ELSE SET p_bonus = N; END IF;END bnIBM 软件部 | DB2 信息管理软件 2006 IBM公司传递参数 在存储过程嵌套调用过程中,参数依照出现的次序进行传递,如果数据类型不匹配,请使
4、用cast函数进行数据类型转换;从嵌套的过程中取得返回值除了通过输出参数获得返回值以外,存储过程可以通过return语句返回一个值,下面的例子演示如何通过get diagnostics语句获得被调用过程的返回值。 下面的过程get_emp_name将基于雇员编号返回雇员的first name,当找到该雇员时返回99,否则返回1000。IBM 软件部 | DB2 信息管理软件 2006 IBM公司CREATE PROCEDURE get_emp_name ( IN p_empno CHAR(6) , out p_fname VARCHAR(10) ) LANGUAGE SQL SPECIFIC
5、get_emp_name gen: BEGIN - Declare variables DECLARE v_return_code INT DEFAULT 99; - 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; RETURN v_return_code;END genIBM 软件部 | DB
6、2 信息管理软件 2006 IBM公司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); - Procedure logic CALL get_emp_name( p_empno, v_fname ); -(1) GET DIAGNOSTICS v_rc = RETURN_STATU
7、S; -(2) IF ( v_rc = 99 ) THEN SET p_output = The employee is: | v_fname | .; 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调用者过程find_emp通过get diagnostics取得被调用者的返回值,get diagnostics必须是紧跟在call语句之后TIP:通过返回值判断 执行状态IBM
8、 软件部 | DB2 信息管理软件 2006 IBM公司从嵌套存储过程返回结果集 存储过程中的结果集可以返回给别的存储过程,也可以返回到客户端的应用程序。定义游标的语法如下: declare cursor with hold with return to caller client for stmt name返回结果集到客户端下面的过程将返回结果集到客户端,返回的结果集是特定部门下的雇员的first name、last name和salary。IBM 软件部 | DB2 信息管理软件 2006 IBM公司CREATE PROCEDURE to_client ( IN p_dept CHAR(3
9、) ) LANGUAGE SQL SPECIFIC to_client DYNAMIC RESULT SETS 1tc: BEGIN - Procedure logic DECLARE v_cur CURSOR WITH RETURN TO CLIENT FOR SELECT firstnme, lastname, salary FROM employee WHERE workdept = p_dept; OPEN v_cur;END tcIBM 软件部 | DB2 信息管理软件 2006 IBM公司CREATE PROCEDURE base_proc ( ) LANGUAGE SQL SPE
10、CIFIC base_proc DYNAMIC RESULT SETS 1 bp: BEGIN - Declare variables DECLARE v_dept CHAR(3) DEFAULT A00; - Procedure logic CALL to_client(v_dept);END bp在执行过程base_proc之后,将返回下面的结果:FIRSTNME LASTNAMESALARYCHRISTINEHAAS52750.00VINCENZOLUCCHESSI46500.00SEANOCONNELL29250.00IBM 软件部 | DB2 信息管理软件 2006 IBM公司p如何
11、返回结果集到调用者过程 将结果集返回到调用者过程需要用到associate locators语句和allocate cursor语句associate locators的语法: associate locator with procedure allocate cursor的语法: allocate cursor for result set 在下面的例子中,过程total_salary调用过程to_caller1,to_caller过程返回firstname、lastname和salary;调用者过程total_salary在收到结果集之后,计算出部门的总的薪水。IBM 软件部 | DB2
12、信息管理软件 2006 IBM公司CREATE PROCEDURE to_caller1 ( IN p_dept CHAR(3) ) LANGUAGE SQL SPECIFIC to_caller1 DYNAMIC RESULT SETS 1tc1: BEGIN - Procedure logic DECLARE v_cur CURSOR WITH RETURN TO CALLER FOR SELECT firstnme, lastname, salary FROM employee WHERE workdept = p_dept; OPEN v_cur;END tc1IBM 软件部 | DB
13、2 信息管理软件 2006 IBM公司CREATE PROCEDURE total_salary ( IN p_dept CHAR(3) , out p_total DECIMAL(9,2) ) LANGUAGE SQL SPECIFIC total_salary ts: BEGIN DECLARE v_fname VARCHAR(12); DECLARE v_lname VARCHAR(15); DECLARE v_salary DECIMAL(9,2) DEFAULT 0.0; DECLARE v_rs RESULT_SET_LOCATOR VARYING; -(1) - Declare
14、returncodes DECLARE SQLSTATE CHAR(5) DEFAULT 00000; CALL to_caller1(p_dept); -(2) ASSOCIATE RESULT SET LOCATOR (v_rs) WITH PROCEDURE to_caller1; -(3) ALLOCATE v_rsCur CURSOR FOR RESULT SET v_rs; -(4) SET p_total = 0; WHILE ( SQLSTATE = 00000 ) DO SET p_total = p_total + v_salary; FETCH FROM v_rsCur
15、INTO v_fname, v_lname, v_salary; END WHILE;END tsIBM 软件部 | DB2 信息管理软件 2006 IBM公司p接收多个结果集:过程emp_multi将返回3个结果集CREATE PROCEDURE emp_multi ( IN p_dept CHAR(3) ) LANGUAGE SQL SPECIFIC emp_multi DYNAMIC RESULT SETS 3em: BEGIN - Procedure logic - Selects firstname DECLARE v_cur1 CURSOR WITH RETURN TO CALLE
16、R FOR SELECT firstnme FROM employee WHERE workdept = p_dept; - Selects lastname DECLARE v_cur2 CURSOR WITH RETURN TO CALLER FOR SELECT lastname FROM employee WHERE workdept = p_dept; - Selects salary DECLARE v_cur3 CURSOR WITH RETURN TO CALLER FOR SELECT salary FROM employee WHERE workdept = p_dept;
17、 OPEN v_cur1; OPEN v_cur2; OPEN v_cur3;END emIBM 软件部 | DB2 信息管理软件 2006 IBM公司CREATE PROCEDURE receive_multi ( in p_dept CHAR(3) , out p_names VARCHAR(100) , out p_total DECIMAL(9,2) ) LANGUAGE SQL SPECIFIC receive_multi rm: BEGIN - Declare variables DECLARE v_fname VARCHAR(12) DEFAULT ; DECLARE v_lna
18、me VARCHAR(15) DEFAULT ; DECLARE v_salary DECIMAL(9,2) DEFAULT 0.0; DECLARE v_rs1, v_rs2, v_rs3 RESULT_SET_LOCATOR VARYING; - Declare returncodes DECLARE SQLSTATE CHAR(5) DEFAULT 00000; - Procedure logic CALL emp_multi(p_dept); ASSOCIATE RESULT SET LOCATOR (v_rs1, v_rs2, v_rs3) WITH PROCEDURE emp_mu
19、lti; ALLOCATE v_rsCur1 CURSOR FOR RESULT SET v_rs1; ALLOCATE v_rsCur2 CURSOR FOR RESULT SET v_rs2; ALLOCATE v_rsCur3 CURSOR FOR RESULT SET v_rs3;IBM 软件部 | DB2 信息管理软件 2006 IBM公司 SET p_names = The employees are:; WHILE (SQLSTATE = 00000) DO SET p_names = p_names | v_fname | | v_lname | ; FETCH FROM v_
20、rsCur1 INTO v_fname; FETCH FROM v_rsCur2 INTO v_lname; END WHILE; SET p_total = 0; WHILE ( SQLSTATE = 00000 ) DO SET p_total = p_total + v_salary; FETCH FROM v_rsCur3 INTO v_salary; END WHILE;END rmIBM 软件部 | DB2 信息管理软件 2006 IBM公司过程的嵌套总共可以嵌套16层,一个过程可以调用过程本身,即所谓的递归。下面的过程是一个使用递归调用的例子,它用来发现每个部门完整的报告链。CR
21、EATE PROCEDURE managers ( IN p_deptno CHAR(3) , out p_report_chain VARCHAR(100) ) LANGUAGE SQL SPECIFIC managers mn: BEGIN - Declare variables DECLARE v_manager_name VARCHAR(15); DECLARE v_admrdept CHAR(3); DECLARE v_report_chain VARCHAR(100); DECLARE v_stmt VARCHAR(100) DEFAULT CALL managers(?,?); -(1) - Procedure logic SELECT admrdept -(2) INTO v_admrdept FROM department WHERE deptno=p_deptno;行(2)发现该部门的上层管理部门IBM 软件部 | DB2 信息管理软件 200
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程造价实习报告(10篇)
- 24.3.2 三角形一边的平行线 同步练习
- 物业公司试用期工作总结简短(3篇)
- 食堂食品安全自查制度
- 社区元旦活动主持稿
- 第二十六章 二次函数(单元重点综合测试)
- 统编版三年级上册语文第一学期期末考试卷(三)(含答案)
- 广东省揭阳市2024-2025学年高二上学期期中考试英语试题(含答案)
- 广东高考语文三年模拟真题(21-23年)知识点汇编-名篇名句默写
- MES系统如何帮助中小企业实现数字化转型
- 第7章-机器学习
- 2024年T电梯修理考试100题及答案
- 第1课 课题一《课外生活小调查·周末生活我采访》(教案)-2024-2025学年三年级上册综合实践活动浙教版
- 世界的气温和降水课件
- Unit2 School things Lesson 3 (教学设计)-2024-2025学年人教精通版(2024)英语三年级上册
- 江苏省2024高中学业水平合格考历史试卷试题(含答案详解)
- DB11T 2256-2024 城市轨道交通钢轨踏面维修技术规范
- 经济学金融学课件-第十三章-中央银行货币政策操作
- 07J901-2 实验室建筑设备(二)
- 国家中医药管理局发布的406种中医优势病种诊疗方案和临床路径目录
- 责任保险行业研究报告
评论
0/150
提交评论