您的位置:首页 > 数据库 > MySQL

mysql 存储过程游标(Cursor)实例

2011-07-20 11:38 555 查看
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 ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: