存储过程(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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构