[精选]db2数据库存储过程.pptx
《[精选]db2数据库存储过程.pptx》由会员分享,可在线阅读,更多相关《[精选]db2数据库存储过程.pptx(83页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、DB2DB2数据库中的存储过程数据库中的存储过程主要内容:主要内容:1 1、存储过程介绍、存储过程介绍2 2、存储过程基础结构、存储过程基础结构3 3、控制语句、控制语句4 4、游标和结果集、游标和结果集5 5、异常处理器、异常处理器6 6、编写和调试存储过程、编写和调试存储过程什么是存储过程?什么是存储过程?Stored ProcedureStored Procedure受受 DB2 DB2 效劳器控制的一段可执行程序效劳器控制的一段可执行程序可以通过可以通过SQLSQL的的CALLCALL语句来完成对存储过程的调用语句来完成对存储过程的调用在存储过程中可以包含业务逻辑在存储过程中可以包含业
2、务逻辑存储过程可以在本地或远程进行调用存储过程可以在本地或远程进行调用存储过程可以接收或传递参数,生成结果集存储过程可以接收或传递参数,生成结果集什么时候使用存储过程?什么时候使用存储过程?使用存储过程的适宜时机使用存储过程的适宜时机:应用程序的性能无法满足预期时应用程序的性能无法满足预期时客户端数量较多且应用程序中客户端数量较多且应用程序中SQLSQL代码分散时代码分散时应用程序需要进行繁重的数据库操作,同时这些操作并不应用程序需要进行繁重的数据库操作,同时这些操作并不需要进行太多的客户交互需要进行太多的客户交互应用程序代码更改频繁应用程序代码更改频繁需要对客户应用代码进行访问控制时需要对客
3、户应用代码进行访问控制时客户应用需要在一次操作中执行多条客户应用需要在一次操作中执行多条 SQL SQL 语句语句C/S:C/S:宏观交互图宏观交互图主要内容:主要内容:1 1、存储过程介绍、存储过程介绍2 2、存储过程基础结构、存储过程基础结构3 3、控制语句、控制语句4 4、游标和结果集、游标和结果集5 5、异常处理器、异常处理器6 6、编写和调试存储过程、编写和调试存储过程存储过程结构存储过程结构CREATE OR REPLACE PROCEDURE CREATE OR REPLACE PROCEDURE IN|OUT|INOUT IN|OUT|INOUT 参数名参数名 数据类型数据类型
4、 默认值默认值 LANGUAGE SQLLANGUAGE SQLBEGINBEGIN 业务逻辑代码业务逻辑代码END;END;参数类型参数类型ININ输入参数输入参数只是将实参传递给存储过程,但在存储过程中不能对其进行修改。换句话说,只是将实参传递给存储过程,但在存储过程中不能对其进行修改。换句话说,对于存储过程而言它是只读的。对于存储过程而言它是只读的。OUTOUT输出参数输出参数在存储过程结束时向调用者返回。一般在过程中都会被赋值。在存储过程结束时向调用者返回。一般在过程中都会被赋值。INOUTINOUT输入输出参数输入输出参数上述两种参数类型的结合体。它可以帮助调用者将实参传递给进程,另
5、外它上述两种参数类型的结合体。它可以帮助调用者将实参传递给进程,另外它也能够作为输出参数被修改和赋值。也能够作为输出参数被修改和赋值。复合语句复合语句 复合语句是指包含在复合语句是指包含在BEGINBEGIN和和ENDEND间的语句。它一间的语句。它一般包括如下语句类型:般包括如下语句类型:声明语句声明语句赋值语句赋值语句控制语句控制语句条件处理语句条件处理语句复合语句例如复合语句例如说明:说明:1.1.复合语句可以嵌套使用。复合语句可以嵌套使用。2.BEGIN2.BEGIN语句可以和标签组合使用,这样可以更清晰的标识语句块的范围。语句可以和标签组合使用,这样可以更清晰的标识语句块的范围。声明
6、语句声明语句变量声明变量声明DECLARE my_var INTEGER DEFAULT 6;DECLARE my_var INTEGER DEFAULT 6;条件声明条件声明DECLARE not_found CONDITION FOR SQLSTATE 02000;DECLARE not_found CONDITION FOR SQLSTATE 02000;游标声明游标声明DECLARE c1 CURSOR FOR select *from staff;DECLARE c1 CURSOR FOR select *from staff;异常处理器声明异常处理器声明DECLARE EXIT H
7、ANDLER FOR SQLEXCEPTION ;DECLARE EXIT HANDLER FOR SQLEXCEPTION ;赋值语句赋值语句语法语法SET lv_name =expression;SET lv_name =expression;SET lv_name =NULL;SET lv_name =NULL;例如例如1 1 SET salary =salary +salary *0.1;SET salary =salary +salary *0.1;2 2 SET init_salary =NULL;SET init_salary =NULL;3 3 SET salary =SET
8、salary =select salary from employee where empno =select salary from employee where empno =lv_emp_numlv_emp_num;注注:如果如果 SELECT SELECT 语句返回记录超过一行,例如语句返回记录超过一行,例如 3 3 将会返回将会返回SQLERRORSQLERROR。存储过程例子存储过程例子嵌套存储过程例子嵌套存储过程例子模块模块ModuleModule模块是如下几种对象的集合:模块是如下几种对象的集合:SPSP,UDFUDF,global variables and cursorsg
9、lobal variables and cursors,typestypes,conditionsconditions模块的主要优势:模块的主要优势:结构良好,便于组织结构良好,便于组织范围限定范围限定CALL mySchema.myModule.myProcCALL mySchema.myModule.myProc信息隐藏信息隐藏每个对象都可以是每个对象都可以是 public public 或或 privateprivate权限控制权限控制可以模块为单位,而不是以模块中的对象为单位来控制权限可以模块为单位,而不是以模块中的对象为单位来控制权限模块模块-规格说明规格说明Module Speci
10、ficationModule Specification模块可以发布模块可以发布type,SP,UDFtype,SP,UDF以供外部使用。以供外部使用。CREATE OR REPLACE MODULE myMod;CREATE OR REPLACE MODULE myMod;ALTER MODULE myMod PUBLISHALTER MODULE myMod PUBLISH TYPE myRowTyp AS ANCHOR ROW myTab;TYPE myRowTyp AS ANCHOR ROW myTab;ALTER MODULE myMod PUBLISHALTER MODULE my
11、Mod PUBLISH FUNCTION myFunc FUNCTION myFuncval1 ANCHOR myTab.col1val1 ANCHOR myTab.col1 RETURNS myRowTyp;RETURNS myRowTyp;ALTER MODULE myMod PUBLISHALTER MODULE myMod PUBLISH PROCEDURE myProc PROCEDURE myProcOUT param1 ANCHOR myTab.col2OUT param1 ANCHOR myTab.col2;模块模块-实现实现Module ImplementationModul
12、e Implementation下面的代码是模块的实现局部:下面的代码是模块的实现局部:ALTER MODULE myMod ADD VARIABLE pkgVar ANCHOR myTab.col1;ALTER MODULE myMod ADD VARIABLE pkgVar ANCHOR myTab.col1;ALTER MODULE myMod ADD FUNCTION ALTER MODULE myMod ADD FUNCTION myFuncmyFuncval1 ANCHOR myTab.col1val1 ANCHOR myTab.col1 RETURNS myRowTyp RETU
13、RNS myRowTypBEGINBEGIN DECLARE var1 myRowTyp;DECLARE var1 myRowTyp;SELECT *INTO var1 FROM myTab WHERE col1 pkgVar;SELECT *INTO var1 FROM myTab WHERE col1 pkgVar;RETURN var1;RETURN var1;ENDENDALTER MODULE myMod ADD PROCEDURE myProcALTER MODULE myMod ADD PROCEDURE myProcOUT param1 ANCHOR myTab.col2OUT
14、 param1 ANCHOR myTab.col2BEGINBEGIN DECLARE varRow myRowTyp;DECLARE varRow myRowTyp;SET param1 =varRow.col2 pkgVar;SET param1 =varRow.col2 pkgVar;ENDEND模块模块-其他语句其他语句删除整个模块删除整个模块DROP MODULE myMod;DROP MODULE myMod;保存规格说明内容,删除实现保存规格说明内容,删除实现ALTER MODULE myMod DROP BODY;ALTER MODULE myMod DROP BODY;删除模
15、块中的存储过程删除模块中的存储过程SPSPALTER MODULE myMod DROP PROCEDURE myProc;ALTER MODULE myMod DROP PROCEDURE myProc;将模块的执行权限赋给将模块的执行权限赋给joejoeGRANT EXECUTE ON MODULE myMod TO joe;GRANT EXECUTE ON MODULE myMod TO joe;主要内容:主要内容:1 1、存储过程介绍、存储过程介绍2 2、存储过程基础结构、存储过程基础结构3 3、控制语句、控制语句4 4、游标和结果集、游标和结果集5 5、异常处理器、异常处理器6 6、
16、编写和调试存储过程、编写和调试存储过程IF IF语句语句格式:格式:IF IF 条件1 THENTHEN statement1;statement1;ELSEIFELSEIF 条件2 THENTHEN statement2;statement2;ELSEELSE statement3;statement3;END END IF;IF;注注:条件成立时为条件成立时为TRUE TRUE 真真,不成立时为不成立时为FALSEFALSE假假 和和 NULLNULLIF IF语句例子语句例子IF IF ratingrating =1 1 THENTHENUPDATEUPDATE EMPLOYEE SET
17、EMPLOYEE SET salarysalary =salary*1.10salary*1.10 WHEREWHERE empnoempno =i_num;i_num;如果满足于如果满足于.时,薪水调整时,薪水调整1.11.1倍倍ELSEIFELSEIF ratingrating =2 2 THENTHENUPDATEUPDATE EMPLOYEE SETEMPLOYEE SET salarysalary =salary*1.05salary*1.05 WHEREWHERE empnoempno =i_num;i_num;ELSEELSEUPDATEUPDATE EMPLOYEE SETEM
18、PLOYEE SET salarysalary =salary*1.03salary*1.03 WHEREWHERE empnoempno =i_num;i_num;ENDEND IF;IF;CASECASE语句语句1 of 21 of 2简单简单CASECASE语句语句CASECASE语句语句2 of 22 of 2稍加变形的稍加变形的CASECASE语句语句LOOPLOOP语句语句语法语法LABEL LOOPLABEL LOOP SQL-procedure-statements;SQL-procedure-statements;END END LOOP LABEL;LOOP LABEL;例
19、如例如fetch_loop:LOOPfetch_loop:LOOPFETCH c1 INTO v_firstname,v_lastname;c1 INTO v_firstname,v_lastname;SET counter =counter +1;SET counter =counter +1;IF counter =51 THEN IF counter =51 THEN LEAVE fetch_loop;LEAVE fetch_loop;END IF;END IF;ENDEND LOOP fetch_loop;LOOP fetch_loop;标签关关键字字FORFOR语句语句语法语法LAB
20、EL FOR for-loop-name AS cursor-name CURSOR FORLABEL FOR for-loop-name AS cursor-name CURSOR FOR select-statement select-statement DODO SQL-procedure-statements;SQL-procedure-statements;END END FOR LABEL;LABEL;例如例如DECLARE fullname CHARDECLARE fullname CHAR4040;FOR v1 AS c1 CURSOR FOR SELECT firstnme,
21、midinit,lastname FROM employeeFOR v1 AS c1 CURSOR FOR SELECT firstnme,midinit,lastname FROM employeeDODO SET fullname=lastname|,|firstnme|,|midinit;SET fullname=lastname|,|firstnme|,|midinit;INSERT INTO tname VALUE INSERT INTO tname VALUE fullnamefullname;END FOR;END FOR;其他控制语句其他控制语句REPEATREPEAT语句语句
22、ftch_loop2:ftch_loop2:REPEATREPEAT FETCH c1 INTO v_firstname,v_midinit,v_lastname;FETCH c1 INTO v_firstname,v_midinit,v_lastname;UNTIL SQLCODE 0 AND REPEAT ftch_loop2;UNTIL SQLCODE 0 AND REPEAT ftch_loop2;WHILEWHILE语句语句WHILE at_end =0 DOWHILE at_end =0 DO FETCH c1 INTO v_firstname,v_midinit,v_lastna
23、me;FETCH c1 INTO v_firstname,v_midinit,v_lastname;IF SQLCODE =100 THEN IF SQLCODE =100 THEN SET at_end =1;SET at_end =1;END IF;END IF;END WHILE;END WHILE;LEAVELEAVE和和ITERATEITERATE语句语句LEAVELEAVE和和ITERATEITERATE语句来控制循环语句来控制循环LEAVELEAVE语句用来跳出循环语句用来跳出循环ITERATEITERATE语句用来回到语句用来回到forfor或者或者whilewhile循环的开
24、始重新执行循环的开始重新执行例如例如FETCH_LOOP1:LOOPFETCH_LOOP1:LOOP FETCH c1 INTO v_dept,v_deptname,v_admdept;FETCH c1 INTO v_dept,v_deptname,v_admdept;IF at_end =1 THEN IF at_end =1 THEN LEAVE FETCH_LOOP1;LEAVE FETCH_LOOP1;ELSEIF v_dept =D01 THEN ELSEIF v_dept =D01 THEN ITERATE FETCH_LOOP1;ITERATE FETCH_LOOP1;END I
25、F;END IF;INSERT INTO department INSERT INTO departmentdeptno,deptname,admdeptdeptno,deptname,admdept VALUES VALUESNEW,v_deptname,v_admdeptNEW,v_deptname,v_admdept;END LOOP FETCH_LOOP1;END LOOP FETCH_LOOP1;GOTOGOTO语句语句GOTOGOTO语句用于直接跳转到指定标签处。例如:语句用于直接跳转到指定标签处。例如:IF v_DEPT =D11IF v_DEPT =D11 GOTO bye;G
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精选 db2 数据库 存储 过程
限制150内