可以用在預存程序的SQL語句主要有以下類型:1、 無返回結果語句,如:INSERT,UPDATE,DROP, DELETE等
2、 select語句返回單行變數並可傳給本地變數(select ..into)
3、 返回多行結果集的select語句,並可使用遊標迴圈處理 注意,預存程序返回的多行結果集,可以被用戶端程式(如php)所接收,但要在一個預存程序中接收另一個預存程序的結果集是不可能的,一般解決辦法是存入暫存資料表供其它過程共用4、 prepare語句 以下主要講述遊標及prepare部分
遊標
定義
DECLARE cursor_name CURSOR FOR SELECT_statement; |
遊標操作
OPEN 開啟遊標
FETCH 擷取遊標當前指標的記錄,並傳給指定變數列表,注意變數數必須與遊標返回的欄位數一致,要獲得多行資料,使用迴圈語句去執行FETCH
FETCH cursor_name INTO variable list; |
CLOSE關閉遊標
注意:mysql的遊標是向前唯讀,也就是說,你只能順序地從開始往後讀取結果集,不能從後往前,也不能直接跳到中間的記錄.
一個完整的例子:
-- 定義本地變數
DECLARE o varchar(128);
-- 定義遊標
DECLARE ordernumbers CURSOR
FOR
SELECT callee_name FROM account_tbl where acct_timeduration=10800;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;
SET no_more_departments=0;
-- 開啟遊標
OPEN ordernumbers;
-- 迴圈所有的行
REPEAT
-- Get order number
FETCH ordernumbers INTO o;
update account set allMoney=allMoney+72,lastMonthConsume=lastMonthConsume-72 where NumTg=@o;
-- 迴圈結束
UNTIL no_more_departments
END REPEAT;
-- 關閉遊標
CLOSE ordernumbers;