mysql 存储过程 语句控制_MySQL存储过程控制语句

MySQL存储过程控制语句

变量作用域

内部的变量在其作用域范围内享有更高的优先权,当执行到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();

执行结果如下:

8b49bc82dc2e680309b95871e491a488.png

条件语句

Ⅰ. if-then -else语句

创建一个表

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;

语句执行结果如下:

49c505a6771789e57dd5e8bd852ba662.png

Ⅱ. 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;

语句执行结果如下:

48c67afe07cc39bf3517e3c6f5464e95.png

循环语句

Ⅰ. while ···· end while:

清空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;

语句执行结果如下:

0a55c300330c5ed82971a23a0db779d1.png

Ⅱ. 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;

语句执行结果:

4460368c22543e3ec3b085b7300652b6.png

Ⅲ. 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; -- 查询结果

语句执行结果如下:

c6b94b646d0d4aedfd894d249cfc2af4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值