别想万里,要把一只脚放到另一脚的前边
分类: Mysql/postgreSQL
2012-06-15 17:13:15
游标
出现的背景: SELECT 语句一般返回的是几行(一组),你想对结果中的每一行数据进行处理,怎么做? 建立的游标这个变量,可以定义游标(结果集的头/尾部)上下移动取出每一行。
怎么在MYSQL 中用游标(CURSOR) ?
1 使用游标之前,必须先定义(声明),过程还要声明绑定的SELECT 语句(声明,没有真正的取数)
2 使用游标,必须打开游标,SELECT 检索出来所有行填充游标(可见这个是一个内存区域,所以有3 步骤之说)
3 使用完游标,必须关闭
例子:
CREATE PROCEDURE processorders()
BEGIN
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders
END;
最简单的游标定义: 定义在存储过程中,用orders 的select 语句填充,DECLARE 在存储过程中定义,所以,存储过程调用完毕,释放游标。当然一般游标的使用结构中,自带上:Close CURSOR_name
CREATE PROCEDURE processorders()
BEGIN
DECLARE o INT;
DECLARE done BOOLEAN DEFAULT 0;
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders
-- Declare continue handler 当出现取数终止 SQLSTATE '02000' 时候 done =1
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
--Open the Cursor
OPEN ordernumbers;
--默认从第一行开始去数据,这样就吧第一次检索出来的order_num 复制给o。
REPEAT
FETCH ordernumbers INTO o;
UNTIL done END REPEAT;
--Close the Cursor
CLOSE ordernumbers;
END;