MySQL存储过程及语法详解


当前第2页 返回上一页

实现:

delimiter $
# 此时调用者在调用这个存储过程的时候必须传递身高的变量值
create procedure pro_name(in height int(11))
begin 
    # 定义一个存储身高类型的变量
    declare figure varchar(50) default '';
    # 使用 if 语句判断身材类型
    if height >= 180 then 
        set figure = '身材高挑';
    else if height < 180 and height >= 170 then
 ?      set figure = '标准身材';
 ? ?else set figure = '一般身材';
 ? ?end if;
 ? ?# 输出结果
 ? ?select concat(height + '身高的身材为:' + figure);
end $
?
delimiter ;

调用:

# 调用该存储过程。需要传递其中的身高值
call pro_name(175); ?# 输出结果为:

2.3.2 out - 输出参数

需求:根据输入的身高,返回当前身高所处的身材类型

实现:

delimiter $?
create procedure pro_output(in height int(11) , out figure varchar(100))
begin 
    # 使用 if 语句判断身材类型
    if height >= 180 then 
        set figure = '身材高挑';
    else if height < 180 and height >= 170 then
 ?      set figure = '标准身材';
 ? ?else set figure = '一般身材';
 ? ?end if;
end $
delimiter ;

调用:

# @标识符:在MySQL中代表的就是用户定义的一个变量,这里我们使用这个变量来接收这个存储过程的返回值
call pro_output(175 , @figure);
?
# 查看存储过程返回的结果
select @figure;

@标识符的作用

  • @figure :这种在变量名前面加上”@“符号,叫做用户会话变量,代表整个会话过程他都是有作用的,这个类似于全局变量一样。当前会话就是代表的,比如我们在命令提示窗口中给好多带有 @ 符号变量进行赋值,此时这些变量的值只作用于当前的会话,当我们把这个窗口关闭的时候,此时这些变量的值就会释放掉。
  • @@global : 这种在变量名前加上 "@@" 符号,叫做系统变量。

2.4 case 结构

语法格式:

# 方式一
case case_value(判断的值)
    when when_value(比较的值) then statement_list(SQL语句)
    [when when_value(比较的值) then statement_list(SQL语句)]...
    [else statement_list(SQL语句)]
end case;
?
# 方式二
case 
    when search_condition(查询条件) then statement_list(SQL语句)
    [when search_condition(查询条件) then statement_list(SQL语句)]...
    [else statement_list(SQL语句)]
end case;

需求:给定一个月份,判断该月份所属的季度

实现:

delimiter $?
create procedure pro_quarter(in mon int(11))
begin 
    # 定义存储季度的变量
    declare result varchar(10);
    case 
        when mon >= 1 and mon <= 3 then
            set result = '第一季度';
        when mon >= 4 and mon <= 6 then
            set result = '第一季度';
        when mon >= 7 and mon <= 9 then
            set result = '第一季度';
        else
            set result = '第四季度';
 ? ? ? ?end case;
    # 输出结果
    select result;  
end $
?
delimiter ;

2.5 while循环

有条件的循环控制语句,当满足条件的时候进入循环,不满足条件的时候退出循环。

语法结构:

# 只要查询条件一直成立就会一直指定do后面的SQL语句,当查询条件不成立的时候直接跳出while循环
while search_condition(查询条件) do
    statement_list(SQL语句)
end while;

需求:计算从1加到n的值

实现:

delimiter $?
create procedure pro_sum(in num int(11))
begin 
    # 定义存储总数的变量
    declare total int(255) default 0;
    # 定义存储循环次数的数量
    declare number int(255) default 1;
    while number <= num do
        set total = total + number;
        set number = number + 1;
    end while;
    select total;
end $
?
delimiter ;

2.6 repeat循环

有条件的循环控制语句,当不满足条件的时候进入循环,满足条件的时候跳出循环。他和while循环是反着的

语法结构:

repeat 
    statement_list(SQL语句)
    until search_condition(查询添加)
end repeat;

需求:计算从1加到n的值

实现:

delimiter $?
create procedure pro_sum(in num int(11))
begin 
    # 定义存储总数的变量
    declare total int(255) default 0;
    repeat 
        set total = total + number;
        set num = num - 1;
        # 注意:这个 unti 后的查询条件不要加分号,加分号会报错。
        until num = 0
    end repeat;
    select total;
end $
?
delimiter ;

2.7 loop循环

loop实现简单的循环,退出循环的条件需要使用其他的语句定义,通常可以使用leave语句实现,具体语法如下:

语法格式:

[begin_label:] loop
    statement_list
end loop [end_label]

如果不在statement_list中增加退出循环的语句,那么loop语句可以永安里实现简单的死循环。

2.8 leave语句

用来从标注的流程构造中退出,通常和 begin...end 或循环一起使用。下面是一个使用loop和leave的简单例子,退出循环:

需求:计算从1加到n的值 ---> 使用loop...leave的形式进行退出循环

实现:

delimiter $
create procedure pro_sum(in num int(11))
begin 
    # 定义存储总数的变量
    declare total int(255) default 0;
    
    c(该循环的别名):loop
        set total = total + num;
        set num = num - 1;
        # 借助leave组织退出条件
        if num <= 0 then
 ? ? ?      leave c;
 ? ? ? ?end if; 
    end loop c;
    select total;
end $
delimiter ;

到此这篇关于MySQL存储过程及语法详解的文章就介绍到这了,更多相关MySQL存储语法内容请搜索

更多SQL内容来自木庄网络博客


标签:SQL

返回前面的内容

相关阅读 >>

plsql与tsql的语法不同

mysql join之完全用法

sqlserver复制数据库的方法步骤(图文)

一条 sql 查询语句怎么样执行的?

sql注入之必备的基础知识

sql优化经验总结

access中关于sql语句的转义字符

mybatis中注解映射sql示例代码

如何写优雅的sql原生语句

oracle 常用的sql语法和数据对象

更多相关阅读请进入《sql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...