mysql 游标

使用游标前,必须声明。这个过程没有检索数据,要使用select语句。

一旦声明必须打开游标,这个过程使用前面定义的SELECT 语句把数据实际检索出来。

对于填有数据的游标,根据需要取出各行。

在游标结束之前,必须关闭游标。

一、创建游标

    使用DECLARE语句。命名游标,并定义相应额SELECT语句,根据需要带WHERE和其他子句。

create PROCEDURE demo()
BEGIN
	DECLARE ordernumbers CURSOR
	FOR
	SELECT order_num FROM orders;
END

上面的存储过程定义了 名字为 ordernubers 的游标,使用了可以检索所有订单的SELECT 语句。

定义游标之后,可以打开它。

打开游标:open ordernumbers;

关闭游标:CLOSE ordernubers;   如果不明确关闭游标,MYSQL将会达到END语句时自动关闭它。上面的语句可以进行如下操作 

create PROCEDURE demo()
BEGIN
	DECLARE ordernumbers CURSOR
	FOR
	SELECT order_num FROM orders;

	OPEN ordernumbers;
	CLOSE ordernumbers;
END

这个存储过程生声明、打开和关闭一个游标。但对检索数据什么都没做。

游标被打开后,使用FETCH语句指定检索什么数据,检索出来的数据存储在什么地方,

实例:

使用游标中检索单个行

create PROCEDURE demo()
BEGIN
	DECLARE o INT;

	DECLARE ordernumbers CURSOR
	FOR
	SELECT order_num FROM orders;

	OPEN ordernumbers;
	FETCH ordernumbers INTO o;
	CLOSE ordernumbers;
END

其中FETCH用来检索当前行的order_num 列(将自动从第一行开始)到一个名为o的局部声明的变量中,对检索出的数据不做任何处理。

BEGIN
	DECLARE done BOOLEAN DEFAULT 0;
	DECLARE o INT;
	DECLARE t DECIMAL(8,2);

	DECLARE ordernumbers CURSOR
	for 
	select order_num from orders;
        --当FETCH到最后一行的时候,会将done更改成1
	DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; 

	CREATE TABLE IF NOT EXISTS ordertotals
	(order_num INT,total DECIMAL(8,2));

	open ordernumbers;
	REPEAT
		FETCH ordernumbers INTO o;
		CALL ordertotal(o,1,t);
		INSERT INTO ordertotals(order_num,total)
		VALUES(o,t);
		UNTIL done END REPEAT;
		CLOSE ordernumbers;
END

查询出orders数据,通过游标写入新建的table ordertotals中。

输入 sql  call demo;

select * from ordertotals;    即可查出orders查出来的数据信息

    

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值