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)示例