抱着刚充过电的电热饼暖手宝充电安全会头晕,是怎么回已回复

mysql存储过程 例子 游标cursor 循环嵌套 事物
mysql存储过程 例子 游标cursor 循环嵌套 事物
发布时间: 10:29:48
编辑:www.fx114.net
本篇文章主要介绍了"mysql存储过程 例子 游标cursor 循环嵌套 事物",主要涉及到mysql存储过程 例子 游标cursor 循环嵌套 事物方面的内容,对于mysql存储过程 例子 游标cursor 循环嵌套 事物感兴趣的同学可以参考一下。
昨天要mysql中写存储过程发现网上有关于cursor循环且套的资料很少,现在 发出本人写的例子,希望能对大家有帮助.[斜体字 必须出现]
DELIMITER $$
USE `db`$$
DROP PROCEDURE IF EXISTS `test`$$
CREATE DEFINER=`root`@`%` PROCEDURE `test`()
DECLARE _tmpId1 INT;&
DECLARE _tmpId2 VARCHAR(5000);
DECLARE not_found INT DEFAULT 0 ;-- 是否未找到数据 标记
DECLARE &cursor1 CURSOR FOR &SELECT id FROM fhtest2 &; -- 测试用无业务关系
DECLARE &cursor2 &CURSOR FOR SELECT test FROM &fhtest2 ;-- 测试用无业务关系
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found = 1; -- 如果未找到数据 将标记改为不可用
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;& --&异常跳出
START TRANSACTION; & &-- 启动事物
INSERT INTO fhtest2 (test) &VALUES (' 开始1 ');
INSERT INTO fhtest2 (test) &VALUES (' 开始2 ');
OPEN cursor1; -- 启动游标1
WHILE not_found = 0 DO& -- 必须加上 不然只执行一次
& FETCH cursor1 INTO _tmpId1;-- 获取数据
& IF NOT not_found THEN --必须加上 不然执行一次
-- 业务处理
OPEN cursor2; -- 启动游标2& 去掉红色部分就是单循环
WHILE not_found = 0 DO
& FETCH cursor2 INTO _tmpId2;-- 获取数据
& IF NOT not_found THEN
INSERT INTO fhtest2 (test) &VALUES (CONCAT(' id + test= & ',_tmpId1,_tmpId2)); -- 业务处理
& END IF ;
END WHILE ;
CLOSE cursor2;
SET not_found = 0 ; -- 将 标记改为0即可用 否则只执行一次,以为内部循环执行完成后 not_found = 1,所有要将其置为0
& END IF; & & & & &
END WHILE;
CLOSE cursor1;
DELIMITER ;
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:MYSQL存储过程开发中如何使用游标嵌套
MYSQL存储过程开发中如何使用游标嵌套
在实际业务逻辑开发中,难免用到游标嵌套,举例如下:
delimiter //
drop procedure if exists good_nested_cursors1
CREATE & PROCEDURE good_nested_cursors1( &)
& &READS SQL DATA
& DECLARE l_grade_id INT;
& DECLARE l_class_id & INT;
& DECLARE l_class_cnt & & INT DEFAULT 0 ;
& DECLARE l_done & & & & &INT DEFAULT &0;
& DECLARE grade_csr cursor &FOR & &SELECT grade_id FROM org_
& DECLARE class_csr cursor &FOR & & SELECT class_id FROM org_class &WHERE grade_id=l_grade_
& DECLARE CONTINUE HANDLER FOR NOT FOUND SET l_done=1;
& OPEN grade_
& grade_loop: LOOP & -- Loop through org_grade
& & FETCH grade_csr into l_grade_
& & & & & & & & select concat('年级:', l_grade_id);
& & IF l_done=1 THEN
& & & &LEAVE grade_
& & END IF;
& & OPEN class_
& & SET l_class_cnt=0;
& & class_loop: LOOP & & &-- Loop through class in grade.
& & & FETCH class_csr INTO l_class_
& & & IF l_done=1 THEN
& & & & &LEAVE class_
& & & END IF;
& & & SET l_class_cnt=l_class_cnt+1;
& & & select concat(' & &班级:', l_class_id);
& & END LOOP;
& & CLOSE class_
& & SET l_done=0;
& END LOOP grade_
& CLOSE grade_
///////////////////////////////////////////////////////
//另一个例子:
CREATE PROCEDURE curdemo()&
NOT DETERMINISTIC&
CONTAINS SQL&
SQL SECURITY DEFINER&
COMMENT ''&
declare done1,done2 int default 0;&
declare name1,name2 varchar(20);&
declare id1,id2
declare cur1 cursor for select id,name from test1;&
declare continue handler for not found set done1 = 1;
open cur1;
fetch cur1 into id1, name1;&
if not done1 then&
insert into test3(name) values(name1);&
declare cur2 cursor for select id,name from test2;&
declare continue handler for not found set done2 = 1;&
open cur2;&
fetch cur2 into id2,name2;&
if not done2 then&
insert into test3(name) values(name2);&
until done2&
close cur2;&
set done2=0;&
until done1&
close cur1;mysql存储过程游标循环使用介绍_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
mysql存储过程游标循环使用介绍
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩6页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢MySql 存储过程使用游标循环插入数据示例
本示例通过 while...end while 循环控制游标来实现插入表记录。
DROP PROCEDURE IF exists pro_initCategoryForTradingE
create procedure pro_initCategoryForTradingEntity(tradingEntityId int)
&&& declare f_parent,entityId&
&&& declare b int default 0;&&& /*是否达到记录的末尾控制变量*/
&&& declare f_name varchar(100);&&&
&&& DECLARE cur_1 CURSOR FOR select FName,FParent,tradingEntityId from t_category_
&&& DECLARE CONTINUE HANDLER FOR NOT FOUND SET b = 1;
&&& OPEN cur_1;
&&& FETCH cur_1 INTO f_name, f_parent, entityId; /*获取第一条记录*/
&&& while b&&1 do&&& &&& &&&
&&& &&& insert into t_category(FName,FParent,FTradingEntity)& values(f_name, f_parent, entityId);
&&& &&& FETCH cur_1 INTO f_name, f_parent, entityId; /*取下一条记录*/
&&& close cur_1;&&&&&&&
call pro_initCategoryForTradingEntity(2);
另外循环也可以用repeat...end repeat 来循环控制,以下是我最初所做的示例代码,但结果是插入的实际数据总数多出一条,在此列出作为一个反面示例代码。当然最后用的是上面while...end while 方案。
DROP PROCEDURE IF exists pro_initCategoryForTradingE
create procedure pro_initCategoryForTradingEntity(tradingEntityId int)
&&&&&&& declare f_parent,entityId,b&
&&& declare f_name varchar(100);
&&& DECLARE cur_1 CURSOR FOR select FName,FParent,tradingEntityId from t_category_
&&& DECLARE CONTINUE HANDLER FOR NOT FOUND
&&& SET b = 1;
&&& OPEN cur_1;
&&& REPEAT
&&&&&&& FETCH cur_1 INTO f_name, f_parent, entityId;
&&& &&& insert into t_category(FName,FParent,FTradingEntity)& values(f_name, f_parent, entityId);
&&& UNTIL b = 1
&&& END REPEAT;
&&& close cur_1;&&&&&&&
call pro_initCategoryForTradingEntity(2);
看过本文的人也看了:
我要留言技术领域:
取消收藏确定要取消收藏吗?
删除图谱提示你保存在该图谱下的知识内容也会被删除,建议你先将内容移到其他图谱中。你确定要删除知识图谱及其内容吗?
删除节点提示无法删除该知识节点,因该节点下仍保存有相关知识内容!
删除节点提示你确定要删除该知识节点吗?

我要回帖

更多关于 充电暖手宝 的文章

 

随机推荐