变量作用域
内部的变量在其作用域范围内享有更高的优先权,当执行到end时,内部变量消失,此时已经在其作用域外,变量不再可见了,因为在存储过程外再也不能找到这个声明的变量,但是我们可以通过out参数或者将其值指派给会话变量来保存其值。
-- 创建存储过程
CREATE PROCEDURE PROC6()
BEGIN
DECLARE X1 VARCHAR(5) DEFAULT "OUTER";
-- ----------嵌套块-------------------------
BEGIN
DECLARE X1 VARCHAR(5) DEFAULT "INNER";
SELECT X1; -- 结果是"INNER"
END;
-- -----------------------------------------
SELECT X1; -- 结果是"OUTER"
END;
-- 调用存储过程
CALL PROC6();
执行结果如下:
条件语句
创建一个表
CREATE TABLE TEMP (ID INT(4));
创建存储过程
CREATE PROCEDURE PROC7(IN PARAM INT)
BEGIN
DECLARE VAR INT;
SET VAR = PARAM + 1;
-- ----------IF语句---------------
-- 注意:判断var是否等于1,要使用=,而不是==;
IF VAR = 1 THEN
INSERT INTO TEMP VALUES (100);
END IF;
-- ----------IF ELSE语句---------------
IF PARAM = 0 THEN
UPDATE TEMP SET ID = ID + 1;
ELSE
UPDATE TEMP SET ID = ID + 2;
END IF;
END;
调用存储过程
CALL PROC7(0);
查询结果:SELECT * FROM TEMP;
语句执行结果如下:
Ⅱ. case语句:
清空TEMP表中的记录
DELETE FROM TEMP;
创建存储过程
CREATE PROCEDURE PROC8(IN PARAM INT)
BEGIN
DECLARE VAR INT;
SET VAR = PARAM + 1;
CASE VAR
WHEN 1 THEN
INSERT INTO TEMP VALUES (1);
WHEN 2 THEN
INSERT INTO TEMP VALUES (2);
ELSE
INSERT INTO TEMP VALUES (100);
END CASE;
END;
调用存储过程
CALL PROC8(10);
查询结果:SELECT * FROM TEMP;
语句执行结果如下:
循环语句
清空TEMP表中的记录
DELETE FROM TEMP;
创建存储过程
CREATE PROCEDURE PROC9()
BEGIN
DECLARE VAR INT DEFAULT 0;
WHILE VAR < 10 DO
INSERT INTO TEMP VALUES (VAR);
SET VAR = VAR + 1;
END WHILE;
END;
调用存储过程
CALL PROC9();
查询结果:SELECT * FROM TEMP;
语句执行结果如下:
Ⅱ. repeat···· end repeat:
它在执行操作后检查结果,而while则是执行前进行检查。
清空TEMP表中的记录
DELETE FROM TEMP;
创建存储过程
CREATE PROCEDURE PROC10()
BEGIN
DECLARE VAR INT DEFAULT 0;
REPEAT
INSERT INTO TEMP VALUES (VAR);
SET VAR = VAR + 1;
UNTIL VAR >= 10 -- 末尾没有分号
END REPEAT;
END;
调用存储过程
CALL PROC10();
查询结果:SELECT * FROM TEMP;
语句执行结果:
Ⅲ. loop ·····end loop:
loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。
创建存储过程
CREATE PROCEDURE PROC11()
BEGIN
DECLARE VAR INT DEFAULT 0;
LOOP1:LOOP
INSERT INTO TEMP VALUES (VAR);
SET VAR = VAR + 1;
IF VAR > 10 THEN -- 循环终止条件
LEAVE LOOP1;
END IF;
END LOOP;
END;
CALL PROC11(); -- 调用存储过程
SELECT * FROM TEMP; -- 查询结果
语句执行结果如下: