MySQL的存储过程

打印 上一主题 下一主题

主题 769|帖子 769|积分 2309

目录

概念
特性
格式
创建存储过程
定义变量
局部变量
用户变量
系统变量
存储过程
存储过程传参-in
存储过程传参-out
存储过程传参-inout
流程控制
流程控制-判断
流程控制语句-case 
控制流程-循环
while循环
repeat循环
loop循环
游标
异常处理-HANDLER句柄

概念

MySQL5.0版本开始支持存储过程,存储过程就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,存储过就是数据库SQL与层层面的代码封装与重用
特性

1.有输入输出参数,可以声明变量,有if/else/case/while等控制语句,通过编写存储过程,可以实现复杂的逻辑功能
2.函数的普通特性:模块化,封装,代码复用
3.速度快,只有首次执行需要经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤
格式

创建存储过程


  1. -- 创建存储过程
  2. delimiter $$
  3. create procedure proc01()
  4. begin
  5.         select empno,ename from emp;
  6. end $$
  7. delimiter ;
  8. -- 调用存储过程
  9. call proc01;
复制代码

定义变量

局部变量

用户自定义,在begin/end块中有效


  1. delimiter $$
  2. create procedure proc02()
  3. begin
  4.         declare var_name01 varchar(20) default 'aaa';  -- 声明/定义变量
  5.         set var_naem01 = 'zhangsan'; -- 给变量赋值
  6.         select var_name01; -- 输出变量的值
  7. end $$
  8. dilimiter ;
  9. call proc02();
复制代码
用户变量

用户自定义,当前会话(连接)有效.类比java的成员变量


  1. delimiter $$
  2. create procedure proc04()
  3. begin
  4.         set @var_name01 = 'beijing';
  5.         select @var_name01;
  6. end $$
  7. dilimiter ;
  8. call proc04();
  9. select @var_name01; -- 外部也是可以使用用户变量
复制代码
系统变量

1.系统变量有分为全局变量会话变量
2.全局变量在MYSQL启动的时候由服务器自动将他的初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改
3.会话变量在每次建立一个新的连接的时候,由MYSQL来初始化,MYSQL会将当前所有全局变量的值复制一份,来作为会话变量
4.也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的
5.全局变量与会话变量的区别在于,对全局变量的修改会影响整个服务器,但是对会话变量的修改,只会影响到当前的会话(也就是当前的数据库连接)
6.有些系统变量的值是可以利用语句来动态进行更改的,但是有些系统变量的值缺是只读的,对于那些可以更改的系统变量,我们可以利用set语句进行更改
系统变量-全局变量
由系统系统,在整个数据库中有效


存储过程

存储过程传参-in

in表示传入的参数,可以传入数值或者变量,即使传入变量,并不会改变变量的值,可以内部更改,仅仅作用在函数范围内

  1. delimiter $$
  2. create procedure proc06(in param_empno int)
  3. begin
  4.         select*from emp where empno = param_empno
  5. end $$
  6. delimiter ;
  7. call proc06(1001);
复制代码
 多个参数传参

存储过程传参-out

out表示从存储过程内部传值给调用者

存储过程传参-inout

inout表示从外部传入的参数经过修改后可以返回的变量,既可以使用传入变量的值也可以修改变量的值(即使函数执行完)


流程控制

流程控制-判断

IF语句包含多个条件判断,根据结果为TURE和FALSE执行语句,与编程语言中的if、else if、else语法类似,其语法格式如下

[code]-- 存储过程-if-- 案例1-- 输入学生的成绩,来判断成绩的级别/*score=60 , score=80 , score=90 , score100 :成就错误*/delimiter $$create procedure proc_12_if (in score int)begin        if score=60 and score=80 and score=90 and score
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表