MYSQL__MYSQL在存儲過程中使用游標CURSOR


背景

在Mysql中使用存儲過程。由於循環的過程中需要使用到字符,按照一些字符來循環,沒有找到好的辦法來循環字符。

所以考慮了游標來循環。

游標的好處是可以選擇多個條件來循環,不限制字符還是或者沒有順序的東西。

實現

CREATE PROCEDURE CALSOMETHING(IN ROUND_CNT INT)
BEGIN
DECLARE I INT;DECLARE pin_value varchar(20); DECLARE pin_cur CURSOR for select pin from prnodes; /*這個表里面記錄着需要循環的數據,不連續,為字符*/ DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET PIN_VALUE = NULL;/*此處用於如果游標取值為空的時候就將pin_value置為NULL,防止錯誤*/ SET i= 1; while i <= ROUND_CNT DO open pin_cur; FETCH pin_cur into pin_value; while (pin_value is not null) DO /*此處做是否能取到值的判斷。不能則結束循環*/ insert into PageRank SELECT pin_value FROM DUAL;FETCH pin_cur into pin_value; end while; close pin_cur; set i=i+1; commit; end while; end;

備注

1.DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET PIN_VALUE = NULL;
  與
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET FINISHED = 1;這種語法是一致的。
  即:SQLSTATE '02000'  = NOT FOUND
過程執行中用此處的條件來進行判斷是否取值結束。

2.SQLSTATE為代碼執行的狀態:
  02000 發生下述異常之一:
   SELECT INTO 語句或 INSERT 語句的子查詢的結果為空表。
   在搜索的 UPDATE 或 DELETE 語句內標識的行數為零。
   在 FETCH 語句中引用的游標位置處於結果表最后一行之后。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM