数据库的存储过程

本文详细介绍了数据库存储过程的概念、好处、创建与调用语法,包括带参数的存储过程示例,以及如何在存储过程中添加条件、处理程序和控制流程。通过具体的IF、CASE、LOOP等语句的应用,展示了存储过程的灵活性和实用性。此外,还阐述了如何管理和修改存储过程。

目录

一、条件

二、定义

三、好处

四、创建存储过程语法

1.不带参数的

2.带参数的

五、调用存储过程语法

六、例子——一个带参数的存储过程”创建、调用、查看执行结果”

1. 例子一:out参数

(1) 创建

(2) 调用

(3) 查看执行结果

2. 例子二:in参数  

(1) 创建

(2)调用

(3)查看执行结果

七、存储过程中加入条件和处理程序

(1)定义条件

(2)定义处理程序

八、存储过程中加入控制流程

(1)有哪些控制流程语句

(2)流程详情

1. IF语句

2. CASE语句

3. LOOP语句(与LEAVE语句、ITERATE语句)

4. REPEAT语句

5. WHILE语句

九、管理存储过程

查看

修改

(1)修改存储过程属性

删除


一、条件

mysql5及其之后才支持存储过程

二、定义

预编译的多条sql语句的集合

三、好处

执行比sql快

四、创建存储过程语法

1.不带参数的

create proceduce  存储过程名字()

begin

        过程体  //里面可以用游标

end;

2.带参数的(oracle、mysql)

create proceduce  存储过程名字(参数1,参数2)

begin

        过程体

end;

3.带参数的(sqlserver)

create proceduce  存储过程名字  参数1,参数2

begin

        过程体

end;

五、调用存储过程语法

mysql和oracle中:

call 存储过程名字();   //不带参数

call 存储过程名字(参数1,参数2);   //带参数

注意:exec和call的区别在于exec只能用于sqlplus,不是sql关键字;而call可用于任何sql中

sqlserver中:

exec 存储过程名字;   //不带参数

call 存储过程名字  参数1,参数2;   //带参数

六、例子——一个带参数的存储过程”创建、调用、查看执行结果”

参数:

in——传递给存储过程(调用时传入,然后传递给存储过程【传给参数,然后再传递给过程体】)

out——从存储过程传出(【过程体传给参数】从存储过程传出,调用时赋值给变量)

inout——对存储体传入传出

1. 例子一:out参数

(1) 创建

create proceduce  MYTEST1( out a int ,out b int)   //第二步:参数a、b接受到过程体传来的值

begin

select min(age) from 表名 into a;   //第一步:into关键字,把min(age)、max(age)赋值给参数a、b*/

select max(age) from 表名 into b;

end;

(2) 调用

/**这儿的@a001、@b001变量只是用来存储结果*/

call MYTEST1(@a001,@b001);   //第三步:从创建的存储过程中传出,调用的时候,分别把参数a、b赋值给变量@a001、@b001

(3) 查看执行结果

    select  @a001;     

2. 例子二:in参数  

(1) 创建

create proceduce  MYTEST2( in x_name varchar ,out x_age int)   //第二步:‘张三’传给参数x_name

begin

select age from 表名 into x_age where name=x_name;   //第三步:参数传给过程体

end;

(2)调用

/**这儿的@a001、@b001变量只是用来存储结果*/

call MYTEST2('张三',@age001);   //第一步:调用时传入‘张三’

(3)查看执行结果

    select  @age001;  

七、存储过程中加入条件和处理程序

(1)定义条件

declare condition 条件名称 for   条件值;

条件值:

  • SQLSTATE ‘错误信息-5位数' 如SQLSTATE‘48000’
  • 错误代码 如2199

(2)定义处理程序

declare 处理方式 HANDLER FOR 判断值;

处理方式:

  • CONTINUE:遇到错误时,不进行处理,继续向后执行;
  • EXIT:遇到错误时,立刻退出程序;
  • UNDO:遇到错误时,撤回之前的操作

判断值:

  • 条件名称
  • SQLSTATE ‘错误信息-5位数' 如SQLSTATE‘48000’
  • SQLWARNING  所有以01开头的SQLSTATE错误代码
  • NOT FOUND  所有以02开头的SQLSTATE错误代码
  • SQLEXCEPTION   所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码
  • 错误代码 如2199

八、存储过程中加入控制流程

(1)有哪些控制流程语句

IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句

(2)流程详情

1. IF语句

例子:存储过程的过程体如下

BEGIN

DECLARE x INT DEFAULT 0;

SET x = 100;

IF x < 100 THEN  SELECT 'x < 100';    //将在控制台输出打印'x<100'

ELSEIF x = 100 THEN  SELECT 'x = 100';

ELSE  SELECT 'x > 100';

END IF;

END

2. CASE语句

例子:存储过程的过程体如下

BEGIN

DECLARE x INT DEFAULT 0;

SET x = 100;

CASE x

WHEN 0 THEN SELECT 'x = 0';  

WHEN 100 THEN SELECT 'x = 100';

ELSE SELECT 'x <> 0 and x <> 100';

END CASE;

END

3. LOOP语句(与LEAVE语句、ITERATE语句)

例子:存储过程的过程体如下

      BEGIN
      DECLARE x INT DEFAULT 0;
      自定义标签名字1: LOOP
      SET x = x + 1;

      IF x = 50 THEN   ITERATE 标签1//跳过本次循环,进入下次循环
      IF x >= 100 THEN   LEAVE 标签1  //退出循环
      END IF;
      END LOOP 自定义标签名字1;
      SELECT x;
      END

4. REPEAT语句

例子:存储过程的过程体如下

     BEGIN
     DECLARE x INT DEFAULT 0;
     自定义标签名字1: REPEAT
     SET x = x + 1;
     UNTIL x >= 10     //until后面的条件为真时,退出循环
     END REPEAT 自定义标签名字1;
     SELECT x;
     END

5. WHILE语句

例子:存储过程的过程体如下

      BEGIN
      DECLARE x INT DEFAULT 0;   
      自定义标签名字1: WHILE x < 10 DO   //while后面的条件为真时,执行循环
      SET x = x + 1;
      END WHILE 自定义标签名字1;
      SELECT x;
      END

九、管理存储过程

查看

show create proceduce 存储过程名字; //查看创建代码

show procedure status; //查看所有存储过程的状态信息

show proceduce status like '存储过程名字—模糊匹配%'; //查看指定存储过程的状态信息

修改

(1)修改存储过程属性

语法:alter proceduce 属性;

例子:alter proceduce MODIFIES SQL DATA SQL SECURITY INVOKER;

属性有哪些?


NO SQL ——不含SQL

CONTAINS SQL ——含 SQL,不读、写数据

READS SQL DATA ——要读

MODIFIES SQL DATA ——要写

SQL SECURITY { DEFINER |INVOKER } ——指明谁有权限执行

  • DEFINER——只有定义者能执行
  • INVOKER——调用者都可以执行

COMMENT '注释内容'——添加注释信息

删除

drop proceduce 【if exits】存储过程名字; //删除

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值