聲明:對於遊標,我也沒有咋用過,有些東西也不是很理解。這裏給你們拷貝過來一個簡單的demo。我加里一些註釋。但願對大家學習有幫助!!java
- 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;