天天看點

mysql總結8----遊标的學習

 聲明:對于遊标,我也沒有咋用過,有些東西也不是很了解。這裡給大家拷貝過來一個簡單的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,如需轉載請自行聯系原作者