DELIMITER $
USE `newtest`$
DROP PROCEDURE IF EXISTS `p1`$
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
BEGIN
DECLARE dn VARCHAR(20);
DECLARE stopFlag INT;
DECLARE v_fetch_status INT DEFAULT 1;
-- 定义游标
DECLARE get_sql CURSOR FOR SELECT dept_name FROM testtable GROUP BY dept_name;
-- 下面这一块一定得紧随游标定义,不然就会报错
DECLARE CONTINUE HANDLER FOR NOT FOUND
BEGIN
SET v_fetch_status = 0;
END;
SET @csql=CONCAT("create table if not exists test(dept_name varchar(20) NOT NULL)");
PREPARE stm FROM @csql;
EXECUTE stm;
-- 循环游标---------get_sql---------start--------------
OPEN get_sql;
lab1:LOOP
FETCH get_sql INTO dn ;
BEGIN
SET @csql=CONCAT("insert into test(dept_name) values('",dn,"')");
PREPARE stm FROM @csql;
EXECUTE stm;
END;
IF v_fetch_status = 0 THEN
LEAVE lab1;
END IF;
END LOOP lab1;
CLOSE get_sql;
-- 循环游标---------get_sql---------end--------------------------------------
SELECT * FROM test;
END$
DELIMITER ;
mysql 存储过程游标(Cursor)实例
最新推荐文章于 2025-04-21 16:50:01 发布