数据库中的控制语句分为分支语句和循环语句,接下来通过其在存储过程中的使用给大家逐一介绍:
分支语句:
1、if then、elseif、else、end if语句
示例:
创建存储过程:
DELIMITER // CREATE PROCEDURE proc (IN sex_type INT, OUT sex_name VARCHAR(4), IN role_type INT, OUT role_name VARCHAR(8)) NO SQL BEGIN IF (sex_type = 0) THEN SET sex_name = '女'; ELSEIF (sex_type = 1) THEN SET sex_name = '男'; ELSE SET sex_name = '其它'; END IF; IF (role_type = 0) THEN SET role_name = '管理员'; ELSEIF (role_type = 1) THEN SET sex_name = '普通员工'; ELSE SET role_name = '游客'; END IF; END // DELIMITER ;说明:SET用来给变量赋值。
注意:MySQL 存储过程中的每条语句的末尾,都要加上分号 “;”
调用存储过程:
SET @sex_type=1,@role_type=2; CALL proc(@sex_type, @sex_name, @role_type, @role_name); SELECT @sex_name AS sex, @role_name AS role;
除了可以使用SET给变量赋值外,还可以使用into为变量赋值:
创建存储过程:
DELIMITER // CREATE PROCEDURE proc(OUT cur_date DATE) NO SQL BEGIN SELECT NOW() INTO cur_date; END// DELIMITER ;调用存储过程:
CALL proc(@cur_date); SELECT @cur_date;
2、case语句:
示例:
DELIMITER // CREATE PROCEDURE proc (IN sex_type INT, OUT sex_name VARCHAR(4), IN role_type INT, OUT role_name VARCHAR(8)) NO SQL BEGIN CASE sex_type WHEN 0 THEN SET sex_name = '女'; WHEN 1 THEN SET sex_name = '男'; ELSE SET sex_name = '其它'; END CASE; CASE role_type WHEN 0 THEN SET role_name = '管理员'; WHEN 1 THEN SET role_name = '普通员工'; ELSE SET role_name = '游客'; END CASE; END // DELIMITER ;调用存储过程:
SET @sex_type=1,@role_type=2; CALL proc(@sex_type, @sex_name, @role_type, @role_name); SELECT @sex_name AS sex, @role_name AS role;
循环语句:
1、while……do……end while语句
示例:
创建存储过程:
DELIMITER // CREATE PROCEDURE proc (OUT result INT) NO SQL BEGIN DECLARE i INT; SET i=0; WHILE i<6 DO SET i=i+1; END WHILE; SET result = i; END // DELIMITER ;说明:DECLARE用来声明存储过程中的临时变量
CALL proc(@result); SELECT @result AS result;2、repeat……until……end repeat语句
该种循环类似于Java中的do while,即在执行操作后检查条件是否成立,而while则是执行前进行检查。
示例:
DELIMITER // CREATE PROCEDURE proc (OUT result INT) NO SQL BEGIN DECLARE i INT; SET i=0; REPEAT SET i=i+1; UNTIL i!=0 END REPEAT; SET result = i; END // DELIMITER;调用存储过程:
CALL proc(@result); SELECT @result AS result;3、 loop……end loop语句
示例:
创建存储过程:DELIMITER // CREATE PROCEDURE proc(OUT result INT) NO SQL BEGIN DECLARE i INT DEFAULT 0; LOOP_LABLE:LOOP SET i=i+1; IF i >=2 THEN LEAVE LOOP_LABLE; END IF; END LOOP; SET result = i; END; // DELIMITER ;说明:DEFAULT用于给声明的临时变量赋默认值。
CALL proc(@result); SELECT @result AS result;