资源描述:
《存储过程学习总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、存储过程一、概述存储过程(StoredProcedure)应用在大型数据库系统中,是SQL语句和流程控制语句的集合,经编译后存储在数据库系统中,用户通过指定存储过程的名字并给出参数(如果带有参数的话)来执行,类似高级语言中的函数。在创建时编译一次,以后执行时运行很快。存储过程的种类:1系统存储过程,以sp_开头,用来进行系统的各项设定,取得信息及相关管理工作,如sp_help就是取得指定对象的相关信息。2本地存储过程,由用户创建的存储过程,一般所说的存储过程就是指本地存储过程。3扩展存储过程,以XP_开头,用户可以使用外部程序语言编写的存储过程,用来调用操作系统提供的功能。存储过程的优
2、点:1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。3.存储过程可以重复使用,可减少数据库开发人员的工作量。4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权。存储过程的缺点:1.调试麻烦。2.移植问题,与具体数据库相关,需要考虑移植问题。在梅安森项目中需要考虑从SQLServer到PostgreSQL移植工作。
3、3.如果在应用程序中大量使用存储过程时,到程序交付给客户的时候,需要考虑系统的相关问题,维护代价大。二、存储过程的常用格式:--创建存储过程,createprocorproceduresp_name@[参数名][类型],@[参数名][类型][output][with]{recompile
4、encryption}asbeginsql_statementend--调用存储过程execsp_name[参数名]--删除存储过程dropproceduresp_name解释:output:表示此参数是可传回的with{recompile
5、encryption}recompile:表示每次执行此存储
6、过程时都重新编译一次encryption:所创建的存储过程的内容会被加密三、各种常见数据库对存储过程的支持大多数常用数据都支持存储过程,但是各类数据库都有自己的过程语言或者语法格式,也就是访问不同类型的数据库,需要考虑移植问题。下面简单描述了各种常见数据库中使用存储过程的语法格式。MySQL:1.创建存储过程,CREATEPROCEDUREsimpleproc(OUTparam1INT),参数类型(in、out、inout)2.调用存储过程,CALLsimpleprocSQLServer:SQLServer数据库提供的过程语言是Transact-SQL,简称T-SQL。1.创建语法cr
7、eateproc
8、procedurepro_name[{@参数数据类型}[=默认值][output],{@参数数据类型}[=默认值][output],....][WITH{RECOMPILE
9、ENCRYPTION
10、RECOMPILE,ENCRYPTION}]asSQL_statements2.调用、执行,execpro_nameOracle:Oracle数据库提供工程语言PL/SQL来构建存储过程。1.创建存储过程语法:CREATE[ORREPLACE]PROCEDUREprocedure_name([arg1[IN
11、OUT
12、INOUT]]type1[DEFAULTvalue1],[a
13、rg2[IN
14、OUT
15、INOUT]]type2[DEFAULTvalue1]],......[argn[IN
16、OUT
17、INOUT]]typen[DEFAULTvaluen])[AUTHIDDEFINER
18、CURRENT_USER]{IS
19、AS}<声明部分>BEGIN<执行部分>EXCEPTION<可选的异常错误处理程序>ENDprocedure_name;2.调用存储过程,EXECUTE
20、EXEC procedure_name(param1,param2);PostgreSQL:PostgreSQL数据库提供多种过程语言,PL/pgSQL,PL/Tcl,PL/Perl,PL/Pytho
21、n,下面是PL/gpSQL过程语言的一个示例。--创建表createtabletest(idint,nametext);--创建存储过程createfunctionins_data_test1(int,text)returnsboolas'declareidaliasfor$1;namealiasfor$2;begininsertintotestvalues(id,name);returntrue;end;'language'plpgsql'-