原始代码如下:

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;

最新文章

  1. Linux上如何查看物理CPU个数,核数,线程数
  2. NXP NFC移植及学习笔记(原创)
  3. 10天学会phpWeChat——第六天:实现新闻的后台管理
  4. Google V8编程详解(二)HelloWorld
  5. PMP和PRINCE2
  6. fir.im Weekly - 一切从知识重构开始
  7. Javaweb -- ServletContextListener
  8. 判断Set里的元素是否重复、==、equals、hashCode方法研究-代码演示
  9. 简单版问卷调查系统(Asp.Net+SqlServer2008)
  10. (转)分布式缓存GemFire架构介绍
  11. windows进程的创建方法
  12. 记一次 Google 面试经历
  13. 写下你的第一个Django应用,第三部分
  14. Entity Framework 学习初级篇7--基本操作:增加、更新、删除、事务
  15. Java源码分析系列之HttpServletRequest源码分析
  16. C/C++语言简介之编程开发
  17. [HEOI2016]排序
  18. (转)JMeter学习逻辑控制器
  19. 2018-08-27 使用JDT核心库解析JDK源码后初步分析API命名
  20. Mastering Creativity:A brief guide on how to overcome creative blocks

热门文章

  1. php 类
  2. Scrum会议3
  3. JavaScript系列:函数调用方式
  4. php获取某年某月的天数 【转】
  5. nginx调优
  6. linux下svn的co如何排除目录
  7. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
  8. Apache Kafka源码分析 - autoLeaderRebalanceEnable
  9. 如何获取DIV的id
  10. Delphi的并行计算