【机房重构个人版】存储过程的使用
来源:互联网 发布:武汉软件新城派出所 编辑:程序博客网 时间:2024/06/04 19:37
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的的SQL语句集,存储在数据库中,经过一次编译后再次调用不需再次编译。因为存储过程执行一次之后,会将语句存在在缓存中,这样下次再执行的时候直接使用缓存中的语句,能显著提高存储过程的性能。
存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集。除了下图中这些语句,其他语句都可以在存储过程中使用!
优点:
①重复使用:存储过程可以重复使用当对数据库进行复杂操作时(如对多个表进行增删改查)可将这些操作封装起来,即可以封装业务功能,从而减少数据库开发人员的工作量。
②提高性能:存储过程在创建时进行了编译,将来使用的时候无需再次编译,而一般的SQL语句每执行一次就需要编译一次。所以使用存储过程能够显著提高程序的效率。
③提高安全性:参数化的存储过程可以防止SQL注入式攻击,而且系统管理员可以对某一存储过程进行权限设置,从而实现对数据访问的限制,提高了安全性。
缺点:
①调试麻烦:但是用PL/SQL Developer调试很方便,可以弥补这个缺点。(oracle存在此机制)
②移植问题:数据库端代码是和数据库相关的,但是如果做工程型项目,基本不存在移植问题。
③重新编译问题:因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程将重新编译。
存储过程分类:
①系统存储过程:以SP_开头,用来进行系统的各项设定,取得信息相关管理工作。
②用户自定义存储过程:用户创建的存储过程是由用户创建并完成某一特定功能的存储过程。一般我们所说的存储过程都是用户自定义存储过程。
③临时存储过程:分为两种存储过程:一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。
存储过程怎么用?
以下通过表T_Student来了解存储过程
无参数存储过程:
选出Student表中所有信息
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Create Proc Proc_Studentas //此处可以忽略不写begin//begin和end是一对,不可以只写其中一个,但可以都不写。select S#,Sname,Sage,Ssex, from T_Studentendgo</span></span></span>
有参数存储过程:
全局变量也称外部变量,是在函数的外部定义的,它的作用域从定义变量处开始,到本程序文件的末尾。
选出指定姓名的学生信息:
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">Create Proc Proc_Student@Sname varchar(100)asbeginselect * from T_Student where sname=@snameendgoexec Proc_Student '赵雷'</span></span></span>
上面是在外部给变量赋值,也可以在内容给变量赋值。
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">create Proc Proc_Student@sname varchar(100)=‘赵雷’as beginselect S#,Sname,Sage,Ssex from student where sname=@snameendgoexec Proc_Student</span></span></span>
也可以把变量的内容输出,使用output
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">create Proc Proc_Student@sname varchar(100),@IsRight int output //传出参数declare @IsRight int //declare为内部声明变量的关键字as if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)//判断是否存在set @IsRight =1elseset @IsRight=0goexec Proc_Student '赵雷' , @IsRight outputselect @IsRight</span></span></span>
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">create Procedure Proc_Student@sname varchar(100),@IsRight int output //传出参数declare @IsRight int //declare为内部声明变量的关键字as if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)//判断是否存在set @IsRight =1elseset @IsRight=0goexec Proc_Student '赵雷' , @IsRight outputselect @IsRight</span></span></span>
以上是全局变量,下面来了解局部变量
局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。
局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
局部变量的显示:select @变量名
<span style="font-size:18px;"><span style="font-size:18px;">create Proc Proc_Studentas declare @sname varchar(100)set @sname='赵雷'select S#,Sname,Sage,Ssex from student where sname=@snamegoexec Proc_Student</span></span>
- 【机房重构个人版】存储过程的使用
- 重构个人版机房收费系统—存储过程
- 【机房重构个人版】存储过程+事务回滚
- 机房收费系统重构之存储过程的使用
- 【VB.Net机房重构】存储过程的使用
- 机房重构之存储过程的使用
- 机房收费系统重构之存储过程的使用
- 【机房个人重构】存储过程的使用
- vb.net版机房重构--存储过程的使用
- 机房重构个人版总结
- 【机房重构】存储过程
- 【机房重构】存储过程
- 【机房重构】存储过程
- 机房重构--存储过程
- 【机房重构】-存储过程
- 机房重构存储过程
- 【机房收费个人版】触发器与存储过程
- 存储过程中使用事务——机房重构
- hihoCoder #1014 : Trie树
- C语言完成2048,辣鸡代码(#滑稽#)
- Link Cut Tree(LCT )学习笔记
- 选择问题-第k小元素
- #java读书笔记#面向对象1
- 【机房重构个人版】存储过程的使用
- 深度懵逼计算机系统。。。DataLab。。
- ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
- BZOJ 1199: [HNOI2005]汤姆的游戏
- 笨方法学Python之一(原第六)
- Android Studio动态调试Smali
- PHP string
- hibernate @mappedBy小记
- 【BZOJ1006】【HNOI2008】神奇的国度