Infinity loop in cursor iteration
原始代码如下:
begin
DECLARE
@SQL_STMT NVARCHAR(300),
@V_CLIENT_ID INT,
@V_PGNAME VARCHAR(1000),
@V_LOGID INT;
DECLARE C2 CURSOR FOR SELECT PGNAME,CLIENT_ID FROM GPGLOBAL.GPLOG;
OPEN C2
FETCH NEXT FROM C2 into @V_PGNAME , @V_CLIENT_ID
WHILE(@@FETCH_STATUS=0)
BEGIN
EXEC GETNEXTSEQUENCENUMBER @V_LOGID OUT,'GPLOG_SEQ';
SET @SQL_STMT='UPDATE GPGLOBAL.GPLOG SET LOG_ID='+CAST(@V_LOGID AS VARCHAR)+' WHERE PGNAME='''+@V_PGNAME+''' AND
CLIENT_ID='+CAST(@V_CLIENT_ID AS VARCHAR);
EXEC SP_EXEC_WITH_LOG 'DB-1216',@SQL_STMT;
FETCH NEXT FROM C2 INTO @V_PGNAME , @V_CLIENT_ID
END
CLOSE C2
DEALLOCATE C2
END
上面的这个存储过程会无限执行,主要原因是游标C2是基于表 GPGLOBAL.GPLOG,在游标C2进行循环的时候,循环里的代码改变了GPGLOBAL.GPLOG的数据,
这会导致,C2看到新的改变过的记录,一次循环下去,一直在执行,无法停下来。只要给C2 定义成 static 就可以了。它只会看到游标打开时候的记录,相当于是那个时候的一个snapshot。
DECLARE C2 CURSOR STATIC FOR SELECT PGNAME,CLIENT_ID FROM GPGLOBAL.GPLOG;
Infinity loop in cursor iteration的更多相关文章
- PL/SQL 04 游标 cursor
--游标 declare cursor 游标名字 is 查询语句;begin 其他语句;end; --游标的属性%FOUND%NOTFOUND%ISOPEN%ROWCOUNT(当前游标的指针位 ...
- Loop Sql
-- Numeric FOR loop -- set serveroutput on -->> do not use in TOAD -- DECLARE k ; BEGIN .. LOO ...
- 【PHP爬虫】curl+simple_html_dom 抓取百度最新消息新闻标题,来源,URL
<title>新闻转载统计</title> <script> function submit(){ wd=document.getElementById('name ...
- PHP zhuaq
change_html_img_src.php <?php $url=$_GET['url']; $id=$_GET['id']; $type=$_GET['type']; $redis_key ...
- [C3] Andrew Ng - Neural Networks and Deep Learning
About this Course If you want to break into cutting-edge AI, this course will help you do so. Deep l ...
- PHP根据抖音的分享链接来抓包抖音视频
现在抖音是个很火的短视频平台,上面有许多不错的小视频.今天教大家怎么用PHP技术来获取到抖音上的的内容. 1:打开抖音选中你认为好的视频点击分享,复制链接,然后你会获取到如下的内容: #科比 愿你去的 ...
- oracle 存储过程
来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...
- PL/SQL存储过程编程
PL/SQL存储过程编程 /**author huangchaobiao *Email:huangchaobiao111@163.com */ PL/SQL存储过程编程(上) 1. Oracle应用编 ...
- ORACLE发送带附件邮件的二三事之一
在oracle使用过程中,我们可以通过pl/sql生成数据文件,也可以通过spool on spool off生成,但某些环境下,我们需要通过存储过程处理数据,数据处理完,需要自动生成数据文件,手工导 ...
随机推荐
- .net操作xml文件(新增.修改,删除,读取)---datagridview与xml文件
参考网址: http://www.cnblogs.com/liguanghui/archive/2011/11/10/2244199.html 很详细的,相信能给你一定的帮助.
- html5文章 -- 应用HTML5 开发手机APP
因为HTML5暂时无法短期内在PC普及,主要方向在使用高端浏览器的高端移动设备,所以可以用作开发Android系统的App.但只有Android2.2以上.iOS3.2以上均支持HTML5,两大平台有 ...
- uploadify 3.2 后台动态传参数
最近在弄一个上传的小功能,需要往后台传递一些动态参数,网上有一些传参数可能是因为版本不对也没成功.仔细看了官网的一些说明,搞定了. 3.2中传递参数用的的是'formData':{'somekey': ...
- git命令常见问题总结
1.git如何放弃所有本地修改 git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态 git stash #把所有没有提交的修改暂存到stash里面.可用git stash ...
- Unity 中场景切换
Unity游戏开发中,单个Scene解决所有问题似乎不可能,那么多个Scene之间的切换是必然存在.如果仅仅是切换,似乎什么都好说,但是在场景比较大的时候不想让玩家等待加载或者说场景与场景之间想通过一 ...
- C#winform中TrackBar的使用
1.手动设置高度(宽):把AutoSize属性设为false 2.重要的事件:Scroll事件和和ValueChanged事件 3.由于TrackBar的Value类型为int,若绑定数据项的最小精度 ...
- Bootstrap页面布局14 - BS按钮群组
首先看看这个代码: <div class='btn-group'> <button type='button' class='btn'>计算机</button> & ...
- redis 应用场景
1.string类型 : 图片和视频文件,静态文件 2.list 双向链表:回帖ID,我的关注列表,消息队列 length = redis.lpush('users:newest', 'user:go ...
- Finally 与 return
网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下fina ...
- Web Storage事件无法触发
不管是在同源其他页面还是在本页面都不能触发storage事件. <!DOCTYPE html> <html> <head> <meta charset=&qu ...