變量作用域
內部的變量在其作用域范圍內享有更高的優先權,當執行到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; -- 查詢結果
語句執行結果如下: