聲明:對于遊标,我也沒有咋用過,有些東西也不是很了解。這裡給大家拷貝過來一個簡單的demo。我加裡一些注釋。希望對你們學習有幫助!!
1.遊标:遊标是用于在存儲過程中疊代SELECT查詢出的資料。
2.遊标的使用步驟:
①:聲明:DECLARE ordernums CURSOR fro SELECT order_num FROM orders;
(說明:
<1>.使用DECLARE定義遊智語句必須定義在變量語句之後。
<2>.ordernums是表示遊标名。
<3>.cursor是表示遊标。
)
②:打開遊标。OPEN ordernums;
③:關閉遊标。CLOSE ordernums;
3.舉個例子:
DELIMITER //
CREATE PROCEDURE processorders() /*定義存儲過程*/
BEGIN
DECLARE done BOOLEAN; /*定義一個變量*/
DECLARE num INT; /*定義一個變量*/
DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; /*定義遊标;必須定義在變量之後!*/
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; /*定義句柄。continue設定循環退出條件。*/
/*當sqlstate為’02000‘時,設定done的值為1,02000是指一個沒有找到的錯誤碼*/
/*sqlstate是mysql的規定。表示找到最後無資料時,mysql報出的狀态碼!!*/
OPEN ordernumbers; /*打開遊标*/
REPEAT /*循環開始*/
FETCH ordernumbers INTO num; /*擷取一行一列的資料*/
INSERT INTO t_table(val) VALUES(num); /*插入到t_table表中*/
UNTIL done END REPEAT; /*類似于java中的do...while循環*/
CLOSE ordernumbers ; /*關閉遊标*/
END //
DELIMITER ;
/*調用遊标:*/
CALL processorders();
4.多列遊标的聲明:
DECLARE ordernumbers CURSOR FOR SELECT order_num,cust_id FROM orders;
對應的FETCH的用法:FETCH ordernumbers INTO num,id;
本文轉自韓立偉 51CTO部落格,原文連結:http://blog.51cto.com/hanchaohan/926419,如需轉載請自行聯系原作者