存储过程(2)

复制代码
-- if语句的使用
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test4()
    BEGIN
        DECLARE height int DEFAULT 175;
        DECLARE description varchar(50) DEFAULT '';
        -- if语句的使用         
        if height >= 180 then
            set description = '身材高挑';
        elseif height >= 170 and height < 180 then
            set description = '标准身材';
        else
            set description = '一般身材';
        end if;
        SELECT CONCAT('身高', height, '对应的身材类型为', description);
    end$
delimiter ; -- 声明结束符号

CALL pro_test4();



-- 传递参数 输入参数 in
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test5(in height int)
    BEGIN
        DECLARE description varchar(50) DEFAULT '';        
        if height >= 180 then
            set description = '身材高挑';
        elseif height >= 170 and height < 180 then
            set description = '标准身材';
        else
            set description = '一般身材';
        end if;
        SELECT CONCAT('身高', height, '对应的身材类型为', description);
    end$
delimiter ; -- 声明结束符号

CALL pro_test5(20);


-- 传递参数 in 输入参数  out输出参数 inout 输入输出参数
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test6(in height int, out description varchar(100))
    BEGIN    
        if height >= 180 then
            set description = '身材高挑';
        elseif height >= 170 and height < 180 then
            set description = '标准身材';
        else
            set description = '一般身材';
        end if;
    end$
delimiter ; -- 声明结束符号


-- 定义一个用户会话变量接收返回值   @@叫做系统变量
CALL pro_test6(20, @description);

SELECT @description;


-- case 
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test7(in mon int)
    BEGIN
        DECLARE result varchar(50);        
        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 CONCAT('传递的月份', mon, '计算的结果', result) as content;
    end$
delimiter ; -- 声明结束符号

CALL pro_test7(10);


-- while循环
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test8(n int)
    BEGIN
        DECLARE total int DEFAULT 0;
        DECLARE num int DEFAULT 1;
        while num <= n do
            set total = total + num;
            set num = num + 1;
        end while;
        select total;
    end$
delimiter ; -- 声明结束符号

CALL pro_test8(100);


-- repeat 循环  满足条件退出循环
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test9(n int)
    BEGIN
        DECLARE total int DEFAULT 0;
        
        repeat
            set total = total + n;
            set n = n - 1;
            -- 结束循环条件 until 后的语句不加 ;
            until n = 0
        end repeat;
        
        select total;
    end$
delimiter ; -- 声明结束符号

CALL pro_test9(100);


-- loop 循环 需要配合 leave
delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test10(n int)
    BEGIN
        DECLARE total int DEFAULT 0;
        
        c:loop
            
            set total = total + n;
            set n = n - 1;
            
            if n <= 0 then 
                leave c;
            end if;
        end loop c;
        
        select total;
    end$
delimiter ; -- 声明结束符号

CALL pro_test10(100);


-- 游标  查询emp表数据并且逐行展示

delimiter $ -- 声明结束符号
CREATE PROCEDURE pro_test11()
    BEGIN
    
        DECLARE e_id int(11);
        DECLARE e_name varchar(50);
        DECLARE e_age int(11);
        DECLARE e_salary int(11);
        DECLARE has_data int DEFAULT 1;
        
        -- 声明游标
        DECLARE emp_result CURSOR for SELECT * FROM emp;
        -- 声明拿不到数据的句柄
        DECLARE EXIT HANDLER FOR NOT FOUND SET has_data = 0;
        
        -- 开启游标
        OPEN emp_result;·
        
        repeat
            -- 抓取游标中的数据  调一次 fetch 游标往下移动一行
            FETCH emp_result into e_id, e_name, e_age, e_salary;
            SELECT CONCAT('id=',e_id,',name=',e_name,',age=',e_age,',e_salary=', e_salary);
            
            until has_data = 0
        end repeat;

        -- 关闭游标
        CLOSE emp_result;
        
    end$
delimiter ; -- 声明结束符号

CALL pro_test11();


-- 存储函数  获取满足条件的 city 总记录数

delimiter $ -- 声明结束符号
CREATE FUNCTION fun1(countryId int)
RETURNS int
BEGIN
    DECLARE cnum int;
    SELECT COUNT(*) into cnum FROM city where country_id = countryId;
    
    return cnum;
END$
delimiter ; -- 声明结束符号

-- 函数调用使用 select 语句
SELECT fun1(1);
复制代码

 

posted @   record-100  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示