当前位置:Gxlcms > 数据库问题 > MySQL~存储过程基本操作

MySQL~存储过程基本操作

时间:2021-07-01 10:21:17 帮助过:22人阅读

声明sql语句的分隔符,默认情况下是; CREATE PROCEDURE p() BEGIN SELECT ‘hello procedure‘; END$ call p() -- ----------------- 注释符后空一格 delimiter $ CREATE PROCEDURE process_01() BEGIN DECLARE nickname VARCHAR(18) DEFAULT(‘大哥哥‘); -- 声明变量,默认值为‘大哥哥’ SET nickname = ‘小弟弟‘; -- 直接赋值 SELECT nickname; END$ DROP PROCEDURE process_01; -- 删除该存储过程 CALL process_01() -- 调用该存储过程 -- INTO------------------ delimiter $ CREATE PROCEDURE process_02() BEGIN DECLARE num int; SELECT COUNT(*) INTO num FROM sinfo; -- INTO 将SELECT COUNT(*) FROM sinfo;的查询结果传递给num SELECT CONCAT(‘sinfo表中的元组数为 ‘, num); END$ DROP PROCEDURE process_02; call process_02 -- ------------------ delimiter $ CREATE PROCEDURE process_03() BEGIN SET @nickname = ‘小弟弟‘; END$ DROP PROCEDURE process_03; call process_03 SELECT @nickname; -- --------------------- -- IN 该参数可作为输入 -- OUT 该参数可作为输出 -- INOUT 即可输入也可输出 delimiter $ CREATE PROCEDURE process_04(in height int) BEGIN DECLARE description VARCHAR(30) DEFAULT(‘没身高‘); if height >= 180 then set description = ‘身材高挑‘; elseif height >= 170 and height < 180 then -- 注意elseif不能分开 set description = ‘标准身材‘; else set description = ‘一般身材‘; end if; -- 结束if SELECT height; SELECT description; END$ DROP PROCEDURE process_04; call process_04(190); -- 调用时传入 call process_04(170); call process_04(160); -- if语句------------------- -- IN 该参数可作为输入 -- OUT 该参数可作为输出 -- INOUT 即可输入也可输出 delimiter $ CREATE PROCEDURE process_05(inout height int, out description VARCHAR(12) ) BEGIN if height >= 180 then set description = ‘身材高挑‘; elseif height >= 170 and height < 180 then set description = ‘标准身材‘; else set description = ‘一般身材‘; set height = 172; -- 长高了,使用inout将传递这个值出来 set description = ‘标准身材‘; end if; -- END$ DROP PROCEDURE process_05; set @height = 190; call process_05(@height,@description); -- @description 用户会话变量,代表整个会话过程都有用,类似全局变量 SELECT @height; -- @@description 系统变量 SELECT @description; set @height = 170; call process_05(@height,@description); SELECT @height; SELECT @description; set @height = 160; call process_05(@height,@description); SELECT @height; SELECT @description; -- CASE语句----------------- delimiter $ CREATE PROCEDURE process_06(mon int) 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 CONCAT(‘传递的月份为 ‘,mon,‘所属季度是 ‘,result); end$ call process_06(7); -- while循环------------- 不满足条件则退出循环 delimiter $ CREATE PROCEDURE process_07(n int) BEGIN DECLARE total int DEFAULT 0; DECLARE num int DEFAULT 1; WHILE num <= n DO -- 累加1~n的值 set total = total + num; set num = num + 1; END WHILE; SELECT CONCAT(‘累计后的值为 ‘,total); end$ DROP PROCEDURE process_07; call process_07(10); -- repeat循环---------------- 满足条件则退出循环 delimiter $ CREATE PROCEDURE process_08(n int) BEGIN DECLARE total int DEFAULT 0; REPEAT set total = total + n; set n = n -1; UNTIL n = 0 END REPEAT; -- 满足条件则退出循环 SELECT CONCAT(‘累计后的值为 ‘,total); end$ DROP PROCEDURE process_08; call process_08(10); -- loop语句-------------- 使用leave语句推出循环 delimiter $ CREATE PROCEDURE process_09(n int) BEGIN DECLARE total int DEFAULT 0; c:loop set total = total + n; set n = n -1; if n<=0 then LEAVE c; -- 使用leave语句推出循环 end if; end loop c; SELECT CONCAT(‘累计后的值为 ‘,total); end$ DROP PROCEDURE process_09; call process_09(10); -- 游标------------------ -- 用来存储查询结果集的数据类型,在存储过程和函数中可以使用光标对结果集进行循环的处理。 -- 光标的使用包括光标的声明、OPEN、FETCH和CLOSE,其语法分别如下。 delimiter $ CREATE PROCEDURE process_10() BEGIN DECLARE sinfo_name VARCHAR(12); -- 定义接收变量 DECLARE sinfo_number int; DECLARE num int DEFAULT(1); DECLARE n int DEFAULT(0); DECLARE sinfo_result CURSOR for SELECT * from sinfo; -- 定义游标 SELECT COUNT(*) INTO num FROM sinfo; open sinfo_result; -- 打开游标 c: LOOP FETCH sinfo_result into sinfo_name,sinfo_number; SELECT CONCAT(‘name:‘,sinfo_name,‘ number:‘,sinfo_number); set n = n + 1; IF n >= num THEN LEAVE c; END IF; END LOOP c; CLOSE sinfo_result; -- 关闭游标 end$ DROP PROCEDURE process_10; call process_10(); -- <--- fetch 每fetch一次执行下一行 -- 吕布 20 | -- ddd 21 | -- aaa 21 \|/ -- n 7 -- hh 12 -- 韩信 1 -- 王老五 123 -- 存储函数----------------- SET GLOBAL log_bin_trust_function_creators = 1; --下方单独一个存储函数无法运行,需设置,下方链接为原因 delimiter $ create FUNCTION fun1(num int) RETURNS int BEGIN DECLARE sum int DEFAULT(0); SELECT COUNT(*) INTO sum FROM sinfo where number = num; return sum; end$ drop FUNCTION fun1; SELECT fun1(21);

链接:
[https://blog.csdn.net/maweiba163/article/details/51895323]

MySQL~存储过程基本操作

标签:else   result   color   web   org   art   Fix   mys   declare   

人气教程排行