MySQL-存储过程结合游标循环插入数据示例

创建游标

CLOSE释放游标使用的所有内部内存和资源,因此在每个游标不再需要时都应该关闭

CREATE PROCEDURE processdemo()
BEGIN
	DECLARE product_id CURSOR
	FOR 
	SELECT id from product;
  --打开和关闭游标
	OPEN product_id;
  CLOSE product_id;
END;

从游标中检索单个行(第一行)

CREATE PROCEDURE processProductName()
BEGIN	
  -- DECLARE local VARIABLES
  DECLARE p_name INT;	
	-- DECLARE the CURSOR
	DECLARE product_name CURSOR
	FOR
	SELECT productName from product;
	-- OPEN the CURSOR
	OPEN product_name;
	-- Get productName form product
	FETCH product_name INTO p_name;
	-- CLOSE the CURSOR
	CLOSE product_name;
END;

###使用游标循环处理数据

CREATE PROCEDURE processdemo()
BEGIN
	
	#声明一个开关变量flag用于循环结束判断默认是true
	DECLARE flag INT DEFAULT TRUE;
  -- Declare local variables,用于存储产品信息中的价格和名称
	DECLARE p_price VARCHAR(45);
  DECLARE n_name  VARCHAR(100);

  #申明一个游标,名字叫liuma,因为游标指向的表内有两个字段,需要两个变量存储,所有得申明两个变量;
	DECLARE liuma CURSOR
	FOR
	SELECT price,productName FROM product;
	-- Create a table to store the results
	CREATE TABLE IF NOT EXISTS price_demo(
		id INT auto_increment PRIMARY KEY ,
		price VARCHAR(45),
		product_name VARCHAR(100)
	);

	-- Open the cursor
	OPEN liuma;
	
	-- Loop through all rows
	REPEAT
		-- Get product price
		FETCH liuma INTO p_price,n_name;
    -- Insert price into price_demo
		INSERT INTO price_demo(price,product_name)
		VALUES(p_price,n_name);
	 -- End of loop
	UNTIL flag = FALSE 
	END repeat;
	-- Close the cursor 
	CLOSE liuma;
END;
-- 调用存储过程
call  processdemo;

-- 查看存储状态
show  PROCEDURE STATUS;

-- 查看创建过程
show CREATE PROCEDURE processdemo;

-- 调用结束删除存储过程
drop PROCEDURE IF EXISTS  processdemo

-- 查看结果
SELECT *from price_demo
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值