资源描述:
《数据库存储过程详述》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
数据存储是一个存储库持久地存储和管理数据的集合,其中不仅包括像仓库数据库,也涵盖简单的存储类型,如简单的文件、电子邮件等。数据库是由数据库管理系统管理的一系列字节,文件是由文件系统管理的一系列字节。因此,任何数据库或文件都是一系列字节,一旦存储,就称为数据存储。数据存储可以指广泛的存储系统类别,包括:纸质档案;像电子表格这样的简单文件;文件系统;电子邮件存储系统;资料库等。PPT详细介绍了数据库的存储过程,内容详实,论述充分,逻辑清晰,欢迎广大用户下载参考和使用。
6.3数据库存储过程
1了解存储过程的概念掌握存储过程创建、删除的方法掌握存储过程的执行方法掌握PostgreSQL的PL/SQL基本语法理解存储过程的优缺点【本节的主要内容】
2一、什么是存储过程存储过程(StoredProcedure)是一种数据库的对象;由一组能完成特定功能的SQL语句集构成;是把经常会被重复使用的SQL语句逻辑块封装起来,经编译后,存储在数据库服务器端;当被再次调用时,而不需要再次编译;当客户端连接到数据库时,用户通过指定存储过程的名字并给出参数,数据库就可以找到相应的存储过程予以调用。
3二、创建存储过程不同的数据库系统创建存储过程的语法存在差异;许多数据库为创建存储过程和函数提供不同命令;如ORACLE、MySQL、SQLSERVER等数据库,使用CREATEPRECEDURE命令创建存储过程,使用CREATEFUNCTION命令创建函数。PostgreSQL使用CREATEFUNCTION命令创建存储过程。
4三、创建存储过程的语法CREATE[ORREPLACE]FUNCTIONname([[argmode][argname]argtype[{DEFAULT|=}default_expr][,...]])[RETURNSretype|RETURNSTABLE(column_namecolumn_type[,...])]AS$$//$$用于声明存储过程的实际代码的开始DECLARE--声明段BEGIN--函数体语句END;$$LANGUAGElang_name;//$$表明代码的结束,LANGUAGE后面指明所用的编程语言(1)name:要创建的存储过程名;(3)argmode:存储过程参数的模式可以为IN、OUT或INOUT,缺省值是IN。(4)argname:形式参数的名字。(5)RETURNS:返回值;RETURNSTABLE:返回二维表(2)ORREPLACE:覆盖同名的存储过程;
5四、创建存储过程的示例创建一个名为countRecords()的存储过程统计STUDENT表的记录数。CREATEORREPLACEFUNCTIONcountRecords()RETURNSintegerAS$count$declarecountinteger;BEGINSELECTcount(*)intocountFROMSTUDENT;RETURNcount;END;$count$LANGUAGEplpgsql;
6五、执行存储过程如果程序员需要在查询窗口执行存储过程,语法形式如下:select存储过程名(参数);或者:select*from存储过程名(参数);例如:selectcountRecords();或者:select*fromcountRecords();
7五、执行存储过程(续)如果程序员需要存储过程调用其它存储过程,语法形式如下:selectinto自定义变量from存储过程名(参数);CREATEORREPLACEFUNCTIONtestExec()returnsintegerAS$$declarerecinteger;BEGINselectintoreccountRecords();//如果不关心countRecords()的返回值,则可用PERFORMcountRecords()代替;returnrec;END;$$LANGUAGEplpgsql;
8六、删除存储过程如果程序员需要删除存储过程,语法形式如下:DROPFUNCTION[IFEXISTS]name([[argmode][argname]argtype[,...]])[CASCADE|RESTRICT]主要参数:(1)IFEXISTS:如果指定的存储过程不存在,那么发出提示信息。(2)name:现存的存储过程名称。(3)argmode:参数的模式:IN(缺省),OUT,INOUT,VARIADIC。请注意,实际并不注意OUT参数,因为判断存储过程的身份只需要输入参数。(4)argname:参数的名字。请注意,实际上并不注意参数的名字,因为判断函数的身份只需要输入参数的数据类型。(5)argtype:如果有的话,是存储过程参数的类型。(6)CASCADE:级联删除依赖于存储过程的对象(如触发器)。(7)RESTRICT:如果有任何依赖对象存在,则拒绝删除该函数;这个是缺省值。
9六、删除存储过程(续)例子:假如需要删除前面定义的存储过程testExec()DROPFUNCTIONIFEXISTStestExec()
10七、PL/SQL基本语法1、声明局部变量。变量声明的语法如下:declare变量名变量类型;如果声明变量为记录类型,变量声明格式为:variable_nameRECORD;注:RECORD不是真正的数据类型,只是一个占位符。例如:declarecountintger;recRECORD;
11七、PL/SQL基本语法(续)2、条件语句在PL/pgSQL中有以下三种形式的条件语句,与其他高级语言的条件语句意义相同。1).IF-THENIFboolean-expressionTHENstatementsENDIF;2).IF-THEN-ELSEIFboolean-expressionTHENstatementsELSE3).IF-THEN-ELSIF-ELSEIFboolean-expressionTHENstatementsELSIFboolean-expressionTHENstatementsELSIFboolean-expressionTHENstatementsELSEstatementsENDIF;
12七、PL/SQL基本语法(续)3、循环语句1).LOOP语句LOOPstatementsENDLOOP[label];2).EXITEXIT[label][WHENexpression];例如:LOOPcount=count+1;EXITWHENcount>100;ENDLOOP;3).CONTINUECONTINUE[label][WHENexpression];例如:LOOPcount=count+1;EXITWHENcount>100;CONTINUEWHENcount<50;count=count+1;ENDLOOP;
13七、PL/SQL基本语法(续)3、循环语句4).WHILEWHILEexpressionLOOPstatementsENDLOOP;例如:WHILEamount_owed>0ANDbalance>0LOOP--dosomethingENDLOOP;5).FORFORnameIN[REVERSE]expression...expressionLOOPstatementsENDLOOP;例如:FORiIN1...10LOOPRAISENOTICE'iIS%',i;ENDLOOP;FORiINREVERSE10...1LOOP--dosomethingENDLOOP;
14七、PL/SQL基本语法(续)4、遍历命令结果FORrecord_or_rowINqueryLOOPstatementsENDLOOP;FOR循环可以遍历命令的结果并操作相应的数据,例如:declarerecRECORD;FORrecINSELECTsid,snameFROMstudentLOOPraisenotice‘%-,%-’,rec.sid,rec.sname;ENDLOOP;
15八、存储过程的优缺点1、使用存储过程的优点(1)减少网络通信量(2)执行速度更快(3)更强的适应性(4)降低了业务实现与应用程序的耦合(5)降低了开发的复杂性(6)保护数据库元信息(7)增强了数据库的安全性
16八、存储过程的优缺点2、使用存储过程的缺点(1)SQL本身是一种结构化查询语言,而存储过程本质上是过程化的程序;面对复杂的业务逻辑,过程化处理逻辑相对比较复杂;而SQL语言的优势是面向数据查询而非业务逻辑的处理。(2)如果存储过程的参数或返回数据发生变化,一般需要修改存储过程的代码,同时还需要更新主程序调用存储过程的代码。(3)开发调试复杂,由于缺乏支持存储过程的集成开发环境,存储过程的开发调试要比一般程序困难。(4)可移植性差