基础流程、关键字:
流程
定义定界符
创建存储过程
存储过程开始
过程体
存储过程结束
定义定界符
通过call进行调用。
关键字
DELIMITER : 定义定界符(如:DELIMITER//),mysql默认是分号。
CREATE PROCEDURE : 创建存储过程(如:CREATE PROCEDURE test(in a int))
DROP PROCEDURE IF EXISTS : 存储过程如果存在就进行删除(如DROP PROCEDURE IF EXISTS test//)
BEGIN … … END// : 标识存储过程的开始与结束
DECLARE : 定义变量(如:DECLARE num int;)
@ : 定义全局变量,不需要进行定义,直接在前面加上@即可(如:SET @num=a+b;)
SET : 给变量赋值 (如:SET num=a+b;)
示例:
DELIMITER// -- 定义边界符
DROP PROCEDURE IF EXISTS test// -- 如果存在就进行删除
CREATE PROCEDURE test(in a INT,in b INT) -- 创建存储过程
BEGIN -- 过程体开始
SET @num=a+b; -- 进行赋值
SELECT @num; -- 进行输出
END// -- 过程体结束
DELIMITER; -- 将定界符修改为默认
-- 调用
CALL test(1,2);
条件控制语句
IF语句
结构:
If (判断条件)then
…….
Else
……
End if;
示例:
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN P_count INT)
BEGIN
IF p_count>10 THEN
SELECT 'p_count大于十';
ELSE
SELECT 'p_count小于等于十';
END IF;
END//
DELIMITER:
CALL test(11);
CASE语句
结构:
当var满足那个when就执行那个流程,如果都不满足就执行else
Case var
When 1 then
……
When 2 then
……
Else
……
End case;
示例:
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN var INT)
BEGIN
CASE var
WHEN 1 THEN
SELECT '星期一';
WHEN 2 THEN
SELECT '星期二';
ELSE
SELECT '其它';
END CASE;
END//
DELIMITER;
CALL test(2);
While语句
结构:
当条件为flase时跳出循环
While (判断条件) do
……
End while;
示例
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN var INT)
BEGIN
DECLARE str VARCHAR(255) DEFAULT 'HZY';
WHILE var<10 DO
SET str= CONCAT('I',' LOVE ','YOU ',str);
SET var=var+1;
END WHILE;
SELECT str;
END//
DELIMITER;
CALL test(9);
Repeat语句
它和while类似,区别在于,while是先检查在执行而repeat是先执行在检查,
While是满足条件进行循环,而Repeat是满足条件退出循环。
结构
Repeat
。。。。。。 -- 先执行在进行判断
Until (判断条件) -- 当达到此条件退出循环
End Repeat;
示例:
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN var INT)
BEGIN
REPEAT
SELECT 'hello world!';
SET var=var+1;
UNTIL var > 10 -- 当达到此条件退出循环
END REPEAT;
END//
DELIMITER;
CALL test(11);
LOOP语句
直接进行循环,直到使用leave关键字标记了此次循环退出才会停止。
结构:
loop_test:lopp
……
If (判断条件) then
leave loop_ test;
end if;
end loop;
示例:
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test(IN var INT)
BEGIN
test_loop:LOOP
SELECT 'hello world!';
SET var=var+1;
IF var > 10 THEN -- 当满足条件后就会被标识退出
LEAVE test_loop;
END IF;
END LOOP;
END//
DELIMITER;
CALL test(9);
游标
流程
1)定义游标结束标识
2)定义游标
3)将游标结束标识绑定到游标
4)打开游标
5)进行遍历取出游标中的多个值
6)进行操作
示例;
DELIMITER//
DROP PROCEDURE IF EXISTS test//
CREATE PROCEDURE test()
BEGIN
-- 定义变量
DECLARE username VARCHAR(30);
DECLARE paw VARCHAR(20);
-- 定义游标结束标识
DECLARE next TINYINT default TRUE;
-- 定义游标
DECLARE user_list CURSOR FOR SELECT user_name,user_password FROM tb_user;
-- 将游标结束标识绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET next = FALSE;
-- 打开游标
OPEN user_list;
-- 进行循环遍历游标
WHILE next DO
-- 取除游标中的多个值
FETCH user_list INTO username,paw;
SELECT CONCAT(username,'===',paw);
END WHILE;
END//
DELIMITER;
CALL test();