MySQL编程之二:光标

(0 comments)

光标必须在声明处理程序之前被声明,并且变量和条件必须在声明光标或处理程序之前被声明。

声明一个光标:

DECLARE <光标名称> CURSOR FOR <选择语句>

打开光标:

OPEN <光标名称>

从光标中读取数据:

FETCH <光标名称> INTO <变量名称>

关闭光标:

CLOSE cursor_<光标名称>

MySQL中的游标分为显式游标和隐式游标,下面分别介绍如何使用。

显式游标

一个在存储程序中使用光标的例子:

drop procedure get_id;
delimiter //

create procedure get_id ()

BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE v_id char(8);
  DECLARE v_name varchar(20);
  DECLARE mycur CURSOR FOR SELECT id FROM students;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

  OPEN mycur;
  
  REPEAT
    FETCH mycur INTO v_id;
    IF NOT done THEN
      INSERT INTO id(id) VALUES (v_id);
    END IF;  
  UNTIL done END REPEAT;
  
  CLOSE mycur;
END

//
delimiter ;

在存储过程中使用了光标时,当所有的数据都Fetch后,没有数据可以获得时将会报"ERROR 1329 (02000): No data - zero rows fetched, selected, or processed"错误。上面利用定义利用例外处理('02000' )来避免错误上述错误。

隐式游标

隐式游标其实就是SELECT INTO语句,隐含开启光标和赋值变量的操作。

DECLARE v_item INT;
SELECT COUNT(*) INTO v_item FROM order WHERE item_id = p_item_id;
Currently unrated

Comments

There are currently no comments

New Comment

required

required (not published)

optional

required