存储过程

来源:互联网 发布:淘一兔淘宝信誉查号 编辑:程序博客网 时间:2024/05/02 00:02
 

   存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

 在大型数据库系统中,存储过程和触发器具有很重要的作用。无论是存储过程还是触发器,都是SQL 语句和流程控制语句的集合。就本质而言,触发器也是一种存储过程。存储过程在运算时生成执行方式,所以,以后对其再运行时其执行速度很快。SQL Server 2000 不仅提供了用户自定义存储过程的功能,而且也提供了许多可作为工具使用的系统存储过程。[1]

存储过程的种类

1系统存储过程

  以sp_开头,用来进行系统的各项设定.取得信息.相关管理工作。

2本地存储过程

  用户创建的存储过程是由用户创建并完成某一特定功能的存储过程,事实上一般所说的存储过程就是指本地存储过程。

3临时存储过程

  分为两种存储过程:

  一是本地临时存储过程,以井字号(#)作为其名称的第一个字符,则该存储过程将成为一个存放在tempdb数据库中的本地临时存储过程,且只有创建它的用户才能执行它;

  二是全局临时存储过程,以两个井字号(##)号开始,则该存储过程将成为一个存储在tempdb数据库中的全局临时存储过程,全局临时存储过程一旦创建,以后连接到服务器的任意用户都可以执行它,而且不需要特定的权限。

4远程存储过程

  在SQL Server2005中,远程存储过程(Remote Stored Procedures)是位于远程服务器上的存储过程,通常可以使用分布式查询和EXECUTE命令执行一个远程存储过程。

5 扩展存储过程

  扩展存储过程(Extended Stored Procedures)是用户可以使用外部程序语言编写的存储过程,而且扩展存储过程的名称通常以xp_开头。

基本语法

  一.创建存储过程

  create procedure sp_name

  @[参数名] [类型],@[参数名] [类型]

  as

  begin

  .........

  end

  以上格式还可以简写成:

  create proc sp_name

  @[参数名] [类型],@[参数名] [类型]

  as

  begin

  .........

  end

  /*注:“sp_name”为需要创建的存储过程的名字,该名字不可以以阿拉伯数字开头*/

  二.调用存储过程

  1.基本语法:exec sp_name [参数名]

  三.删除存储过程

  1.基本语法:

  drop procedure sp_name

  2.注意事项

  (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

  四.其他常用命令

  1.show procedure status

  显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

  2.show create procedure sp_name

  显示某一个mysql存储过程的详细信息

  3、exec sp_helptext sp_name

  显示你这个p_name这个对象创建文本

格式

  CREATE PROCEDURE [拥有者.]存储过程名[;程序编号] sql中的存储过程及相关介绍

  [(参数#1,…参数#1024)]

  [WITH

  {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}

  ]

  [FOR REPLICATION]

  AS 程序行

  其中存储过程名不能超过128个字。每个存储过程中最多设定1024个参数

  (SQL Server 7.0以上版本),参数的使用方法如下:

  @参数名 数据类型[VARYING] [=内定值] [OUTPUT]

  每个参数名前要有一个“@”符号,每一个存储过程的参数仅为该程序内部使用,参数的类型除了IMAGE外,其他SQL Server所支持的数据类型都可使用。

  [=内定值]相当于我们在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是我们需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。

  例子:

  CREATE PROCEDURE order_tot_amt

  @o_id int,

  @p_tot int output

  AS

  SELECT @p_tot = sum(Unitprice*Quantity)

  FROM orderdetails

  WHERE ordered=@o_id

  GO

  例子说明:

  该例子是建立一个简单的存储过程order_tot_amt,这个存储过程根据用户输入的定单ID号码(@o_id),由定单明细表 (orderdetails)中计算该定单销售总额[单价(Unitprice)*数量(Quantity)],这一金额通过@p_tot这一参数输出给调用这一存储过程的程序。

存储过程的功能

  这类语言主要提供以下功能,让用户可以设计出符合引用需求的程序:

  1)、变量说明

  2)、ANSI(美国国家标准化组织)兼容的SQL命令(如Select,Update….)

  3)、一般流程控制命令(if…else…、while….)

  4)、内部函数

原创粉丝点击