欢迎来到天天文库
浏览记录
ID:50431907
大小:5.08 MB
页数:82页
时间:2020-03-13
《db2数据库存储过程.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、中国移动通信集团河南有限公司业务支援中心DB2数据库中的存储过程主要内容:1、存储过程介绍2、存储过程基础结构3、控制语句4、游标和结果集5、异常处理器6、编写和调试存储过程什么是存储过程?(StoredProcedure)受DB2服务器控制的一段可执行程序可以通过SQL的CALL语句来完成对存储过程的调用在存储过程中可以包含业务逻辑存储过程可以在本地或远程进行调用存储过程可以接收或传递参数,生成结果集什么时候使用存储过程?使用存储过程的合适时机:应用程序的性能无法满足预期时客户端数量较多且应用程序中SQL代码分散时应用程序需要进行繁重的数
2、据库操作,同时这些操作并不需要进行太多的客户交互应用程序代码更改频繁需要对客户应用代码进行访问控制时客户应用需要在一次操作中执行多条SQL语句C/S:宏观交互图主要内容:1、存储过程介绍2、存储过程基础结构3、控制语句4、游标和结果集5、异常处理器6、编写和调试存储过程存储过程结构CREATEORREPLACEPROCEDURE<过程名>([IN
3、OUT
4、INOUT]参数名数据类型默认值)LANGUAGESQLBEGIN业务逻辑代码END;参数类型IN(输入参数)只是将实参传递给存储过程,但在存储过程中不能对其进行修改。换句话说,对于存储过
5、程而言它是只读的。OUT(输出参数)在存储过程结束时向调用者返回。一般在过程中都会被赋值。INOUT(输入输出参数)上述两种参数类型的结合体。它可以帮助调用者将实参传递给进程,另外它也能够作为输出参数被修改和赋值。复合语句复合语句是指包含在BEGIN和END间的语句。它一般包括如下语句类型:声明语句赋值语句控制语句条件处理语句复合语句示例说明:1.复合语句可以嵌套使用。2.BEGIN语句可以和标签组合使用,这样可以更清晰的标识语句块的范围。声明语句变量声明DECLAREmy_varINTEGERDEFAULT6;条件声明DECLAREnot
6、_foundCONDITIONFORSQLSTATE‘02000’;游标声明DECLAREc1CURSORFORselect*fromstaff;异常处理器声明DECLAREEXITHANDLERFORSQLEXCEPTION…;赋值语句语法SETlv_name=expression;SETlv_name=NULL;示例(1)SETsalary=salary+salary*0.1;(2)SETinit_salary=NULL;(3)SETsalary=(selectsalaryfromemployeewhereempno=lv_emp_nu
7、m);注:如果SELECT语句返回记录超过一行,示例3将会返回SQLERROR。存储过程例子嵌套存储过程例子模块(Module)模块是如下几种对象的集合:SP,UDF,globalvariablesandcursors,types,conditions模块的主要优势:结构良好,便于组织范围限定CALLmySchema.myModule.myProc()信息隐藏每个对象都可以是public或private权限控制可以模块为单位,而不是以模块中的对象为单位来控制权限模块-规格说明(ModuleSpecification)模块可以发布type,S
8、P,UDF以供外部使用。CREATEORREPLACEMODULEmyMod;ALTERMODULEmyModPUBLISHTYPEmyRowTypASANCHORROWmyTab;ALTERMODULEmyModPUBLISHFUNCTIONmyFunc(val1ANCHORmyTab.col1)RETURNSmyRowTyp;ALTERMODULEmyModPUBLISHPROCEDUREmyProc(OUTparam1ANCHORmyTab.col2);模块-实现(ModuleImplementation)下面的代码是模块的实现部分:
9、ALTERMODULEmyModADDVARIABLEpkgVarANCHORmyTab.col1;ALTERMODULEmyModADDFUNCTIONmyFunc(val1ANCHORmyTab.col1)RETURNSmyRowTypBEGINDECLAREvar1myRowTyp;SELECT*INTOvar1FROMmyTabWHEREcol1pkgVar;RETURNvar1;ENDALTERMODULEmyModADDPROCEDUREmyProc(OUTparam1ANCHORmyTab.col2)
10、BEGINDECLAREvarRowmyRowTyp;SETparam1=varRow.col2–pkgVar;END模块-其他语句删除整个模块DROPMODULEmyMod;保
此文档下载收益归作者所有