存储过程

来源:互联网 发布:电脑壁纸软件哪个好 编辑:程序博客网 时间:2024/05/21 06:51

什么是存储过程

存储过程不同于sql语句,它相当于一个function(…),一个存储过程是一个可编程的函数,它在数据库中创建并保存。可以有参数、流控制语句(IF,WHILE,LOOP,REPEAT,和CASE语句)、返回值,当然核心还是sql语句。这样的程序存储在数据的数据字典中。

存储过程的典型用途包括数据验证(集成到数据库中)或权限控制机制。此外,存储过程可以整合和集中最初在应用程序中实现的逻辑。为了节省时间和内存,需要执行多个SQL语句的广泛或复杂的处理可以保存到存储过程中,所有应用程序都调用该过程。可以通过从另一个执行一个存储过程来使用嵌套存储过程。

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。 
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。

为什么要用存储过程

1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。 
2.当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。 
3.存储过程可以重复使用,可减少数据库开发人员的工作量。 
4.安全性高,可设定只有某些用户才具有对指定存储过程的使用权

存储过程怎么用

以下通过表Student 来了解存储过程的简单用法,所有例子均很简单。 
这里写图片描述

无参数存储过程:

选出Student表中的所有信息

create proc StuProcas      //此处 as 不可以省略不写begin   //beginend 是一对,不可以只写其中一个,但可以都不写select S#,Sname,Sage,Ssex from studentendgo
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

有参数存储过程:

全局变量 
全局变量也称为外部变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。

选出指定姓名的学生信息:

create proc StuProc@sname varchar(100)   as beginselect S#,Sname,Sage,Ssex from student where sname=@snameendgoexec StuProc '赵雷'   //执行语句
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

上面是在外部给变量赋值,也可以在内部直接给变量设置默认值

create proc StuProc@sname varchar(100)='赵雷'as beginselect S#,Sname,Sage,Ssex from student where sname=@snameendgoexec StuProc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

也可以把变量的内容输出,使用output

create proc StuProc@sname varchar(100),@IsRight int  output //传出参数。多个参数使用‘,’隔开输出参数标注outputas if exists (select S#,Sname,Sage,Ssex from student where sname=@sname)set @IsRight =1elseset @IsRight=0godeclare @IsRight int exec StuProc '赵雷' , @IsRight outputselect @IsRight
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

以上是全局变量,下面来了解局部变量

局部变量也称为内部变量。局部变量是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。 
局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型} 
局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式} 局部变量的显示:select @变量名

create proc StuProcas declare @sname varchar(100)set @sname='赵雷'select S#,Sname,Sage,Ssex from student where sname=@snamegoexec StuProc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

那如果是要把局部变量的数据显示出来怎么办呢?

create proc StuProcas declare @sname varchar(100)set @sname=(select Sname from student where S#=01)select @snamegoexec StuProc
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8









原创粉丝点击