MySQL存儲過程和函數(四)

一、聲明光標
DECLARE  cursor_name CURSOR FOR  select_statement
cursor_name惟一
select_statement裏不能包含INTO
二、光標OPEN語句
OPEN cursor_name
三、光標FETCH語句
FETCH  cursor_name INTO  var_name [,  var_name] ...
語句用指定的打開光標讀取下一行(若是有下一行的話),而且前進光標指針。
四、光標CLOSE語句
CLOSE  cursor_name
若是未被明確地關閉,光標在它被聲明的複合語句的末尾被關閉。
 
五、光標
簡單光標在存儲程序和函數內被支持。語法如同在嵌入的SQL中。光標當前是不敏感的,只讀的及不滾動的。不敏感意爲服務器能夠活不能夠複製它的結果表。

光標必須在聲明處理程序以前被聲明,而且變量和條件必須在聲明光標或處理程序以前被聲明。服務器

例如:函數

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a CHAR(16);
  DECLARE b,c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
 
  OPEN cur1;
  OPEN cur2;
 
  REPEAT
    FETCH cur1 INTO a, b;
    FETCH cur2 INTO c;
    IF NOT done THEN
       IF b < c THEN
          INSERT INTO test.t3 VALUES (a,b);
       ELSE
          INSERT INTO test.t3 VALUES (a,c);
       END IF;
    END IF;
  UNTIL done END REPEAT;
 
  CLOSE cur1;
  CLOSE cur2;
END
相關文章
相關標籤/搜索