mysql存储过程

1,讲讲什么是mysql存储过程,有哪些特性?

**mysql存储过程就是一组sql语句集,可以实现一下比较复杂的逻辑功能,类似于C语言的函数.数据库sql语言层面的代码封装与复用.**
​
**有输入输出参数,可以声明变量,有一些控制语句,比如if/else,case,while等,通过写存储过程,可以去实现复杂的逻辑功能.**              **拥有函数的普遍特性:模块化,封装,代码复用.           速度快,只有首次执行需经过编译和优化步骤,后继被调用可以直接执行,可以省去以上步骤.**

2,表达一下mysql存储过程的语句

delimiter 自定义结束符
create procedure 存储名([in,out,inout]  参数名  数据类型....)
begin 
    sql语句
end 自定义结束符
delimiter;

3,试着写一下变量定义和操作,调用一下;

delimiter $$
create procedure proc01()
begin
    select empno,ename from emp;
end $$
delimiter $$;
​
**调用过程
call proc01();

4,介绍一下mysql的系统变量,给出相关语法

1,局部变量: 声明变量 declare var_name  var_type [default var_value]; 例如:declare age int;
2,给变量赋值, select name[...]into var_name[...] from table where ...;
3,用户变量(会话变量):当前会话有效, 语法:@var_name  不需要提前声明,使用即声明
4,系统变量分为全局变量和会话变量,全局变量在mysql启动时由服务器自动将他们初始化为默认值,这些默认值可以通过my.ini这个文件来更改,会话变量在每次建立一个新的连接时候,由mysql来初始化,mysql将当前所有全局变量的值复制一份,如果没有更改过会话变量和全局变量,那么这些变量的值都是一样的.
5,全局变量和会话变量区别:对全局变量修改影响到整个服务器,但对会话变量修改,只会影响到当前会话.
6,某些系统变量的值可以被修改,但有些只可以读,用set语句进行更改系统变量的值

5,对全局变量演示一下,并且对其进行修改

1,全局变量@@global.某个变量的值
2,查看有哪些全局变量   show global variables
3,查看某个全局变量    select @@global.某个值
4,修改某个全局变量的值   set global xxx=

6,同5,对会话变量进行操作

1,会话变量 @@session.某个值
2,查看会话变量  show session variables
3,查看某个会话变量  select @@session.某个值
4,修改会话变量的值   set session.某个值=

7,讲述一下存储过程参数以及写出相关示例

1,in表示传入的参数,可以传入值或变量,仅在函数范围内有效
delimiter $$
create procedure in_test(in xxx varchar(10))
begin
    sql语句
end $$
delimiter ;
​
2,out 表示存储过程内部传出值来
delimiter $$
create procedure out_test(in xxx int ,out xxx varchar(50) )
begin
  sql语句
end $$
delimiter ;
​
3,inout表示外部传入的参数经过修改后可以返回的变量,既可以传入变量也可以修改变量
delimiter $$
create procedure inout_test(inout xxx varchar(50),inout xxx int)
begin
     sql语句
end $$
delimiter ;
set @xxx = ;
set @xxx = ;
call inout_test(@xxx, @xxx) ;
select @xxx;
select @xxx;
​
​

8,描述一下判断的流程控制,并且完成以下需求任务

-- 输入学生的成绩,来判断成绩的级别: /* score < 60 :不及格 score >= 60 , score <80 :及格 score >= 80 , score < 90 :良好 score >= 90 , score <= 100 :优秀 score > 100 :成绩错误 */

if 条件为真   then   执行语句1
elseif 条件为真   then   执行语句2
else  执行语句1和执行语句2不执行的语句
end id
​
delimiter  $$
create procedure proc(in score int)•
begin•  
if score < 60  then select '不及格';•    
elseif  score < 80  then select '及格' ;•   
elseif  score < 90  then  select '良好';•   
elseif  score <= 100 then select '优秀';•   
else select '成绩错误';• 
end if;•
end $$•
delimiter  ;•
call proc_08_if(120)•

9,描述一下case流程控制

1,case case_value
    when when_value then statement_list
    [when when_value then statement_list] ...
    [else statement_list]
end case
​
2,case
    when search_condition then statement_list
    [when search_condition then statement_list] ...
    [else statement_list]
end case

10,描述一下while循环控制

[标签]while 循环条件 do
     循环体;
end while [标签];

11,描述一下repeat循环

[标签:]repeat 
 循环体;
until 条件表达式
end repeat [标签];
​

12,描述一下loop循环

[标签:] loop
  循环体;
  if 条件表达式 then 
     leave [标签]; 
  end if;
end loop;
​

13,讲讲mysql的游标

1,游标是用来存储查询结果集的数据类型,在存储过程中可以使用光标对结果集进行循环的处理.使用游标需要经过这些步骤:
声明,打开,取值,关闭    
2,语法格式:
-- 声明语法
declare cursor_name cursor for select_statement
-- 打开语法
open cursor_name
-- 取值语法
fetch cursor_name into var_name [, var_name] ...
-- 关闭语法
close cursor_name
​
游标的使用需要配合循环来把游标的数据一一插入

14,描述一下mysql存储过程的异常处理

在语法中,变量声明、游标声明、handler声明是必须按照先后顺序书写的,否则创建存储过程出错。
​
  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值