好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MySQL~存储过程基本操作

声明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   

查看更多关于MySQL~存储过程基本操作的详细内容...

  阅读:26次