MySQL存儲過程

1. 聲明變量(賦值)

1.1 DECLARE

DECLARE 定義變量。

DECLARE bn VARCHAR(40);
DECLARE pre_bn VARCHAR(40) default 'null';

declare 定義的變量類似於局部變量,只在存儲過程的begin 和 end 之間生效。

1.2 SET

SET 定義變量。

set is_master = '否';    

set 普通變量只在存儲過程中生效。

SET @b=1;

@set 形式的變量,可以理解爲會話變量,或者說是全局變量,即這個變量可以在被調用的存儲過程或者代碼間共享數據。

2 遊標CURSOR

遊標,MySQL中可以使用遊標循環處理數據。

2.1 聲明遊標

DECLARE cursor_name CURSOR FOR select_statement

select_statement 是一條查詢語句,將返回結果賦值給了 cursor_name 的變量。

2.2 遊標OPEN

打開事先聲明的遊標。

OPEN cursor_name

2.3 遊標FETCH 語句

FETCH cursor_name INTO bn, cid, cot, lst;

該語句將讀取遊標的一行數據,同時將數據賦值給後面的變量;並將指針前進,以便讀取下一行,如果有下一行的話。

2.4 遊標CLOSE

CLOSE cursor_name

該語句關閉之前打開的遊標。

3. HANDLER

continue: 觸發後繼續執行後續語句
exit: 觸發後後續不在執行

declare continue HANDLER for not found set done = true; 

該語句意思是如果沒有數據返回,則繼續往下執行,同時將變量 done 設置爲 TRUE。

4. 流程控制

4.1 if 與 end if

通過if語句來進行條件判斷,確定執行哪條語句。

if 表達式 then
    執行代碼
else 
    執行代碼
end if

4.2 LOOP

loop用來循環處理數據,可以和遊標搭配使用。

loop_name: LOOP (循環開始)
    --循環處理數據--
    ITERATE loop_name;(返回開始繼續執行下一次)
    LEAVE read_loop;(離開循環,不在執行)
END LOOP read_loop;(循環結束)

5. 聲明存儲過程

create procedure pName()
BEGIN
    --代碼
END

以下是聲明帶參數的存儲過程

create procedure pr_add(a int,b int)
BEGIN
    --代碼
END

存儲過程是可以有返回值的,具體如何聲明還需要進一步學習。

6. 調用存儲過程

call pName()

7. 示例

以下是簡單的MySQL存儲過程示例

BEGIN
    DECLARE i varchar(40);
    DECLARE n varchar(40);
    DECLARE done INT DEFAULT 0;
    DECLARE cur CURSOR FOR 
        select t.id k,t.name1 v from test01 t;

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

    OPEN cur;
    p_loop:LOOP
        FETCH cur INTO i,n;
        if done=1 then
            LEAVE p_loop;
        end if;
        if i!=null then
            insert into test02 values (n,i);
            ITERATE p_loop;
        else
            ITERATE p_loop;
        end if;
    END LOOP p_loop;
    commit;
    CLOSE cur;

END

參考文章:
1. mysql學習之寫幾個最簡單的存儲過程
2. MySQL存儲過程遊標(cursor)示例

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章