飘飘悠悠 发表于 2015-1-16 22:25:16

MYSQL编程:封闭开释游标

这种服务也提供了足够的监控功能来跟踪性能和使用情况,在问题发生时将发出通知并生成一定深度的分析报告。13.5.1封闭游标
1、利用CLOSE命令封闭游标
在处置完游标中数据以后必需封闭游标来开释数据了局集和定位于数据纪录上的锁。CLOSE语句封闭游标,但不开释游标占用的数据布局。假如筹办在随后的利用中再次翻开游标,则应利用CLOSE命令。其封闭游标的语律例则为:
CLOSE{{cursor_name}|cursor_variable_name}
2、主动封闭游标
我们已懂得到游标可使用在存储历程、触发器和Transact_SQL剧本中。假如在声明游标与开释游标之间利用了事件布局,则在停止事件时游标会主动封闭。其详细的情形以下所示:
(1)、声明一个游标
(2)、翻开游标
(3)、读取游标
(4)、BEGINTRANSATION
(5)、数据处置
(6)、COMMITTRANSATION
(7)、回到步骤3
在如许的使用情况中。当从游标中读取一条数据纪录举行以BEGINTRANSATION为开首,COMMITTRANSATION或ROLLBACK为停止的事件处置时,在程序入手下手运转后,第一行数据可以被准确前往,经过步骤7,程序回到步骤3,读取游标的下一行,此经常会发明游标未翻开的毛病信息。其缘故原由就在于当一个事件停止时,不论其是以COMMITTRANSATION仍是以ROLLBACKTRANSATION停止,MSSQLSERVER城市主动封闭游标,以是当持续从游标中读取数据时就会形成毛病。
办理这类毛病的办法就是利用SET命令将CURSOR_CLOSE_ON_COMMIT这一参数设置为OFF形态。其目标就是让游标在事件停止时仍持续坚持翻开形态,而不会被封闭。利用SET命令的格局为:
SETCURSOR_CLOSE_ON_COMMITOFF

13.5.2开释游标
在利用游标时,各类针对游标的操纵大概援用游标名,大概援用指向游标的游标变量。当CLOSE命令封闭游标时,并没有开释游标占用的数据布局。因而常利用DEALLOCATE命令。经由过程该命令能够删撤除游标与游标名或游标变量之间的接洽,而且开释游标占用的一切体系资本。其语律例则为:
DEALLOCATE{{cursor_name}|@cursor_variable_name}
各参数的寄义参看13.3翻开游标一节。
当利用DEALLOCATE@cursor_variable_name来删除游标时,游标变量其实不会被开释,除非凌驾利用该游标的存储历程、触发器的局限(即游标的感化域)。

13.5.3游标变量
游标变量是从MSSQLSERVER7版本才入手下手利用的一种新增数据范例。界说一个游标变量次要有两种办法。
起首我们先声明一个游标。


利用SET语句将一游标赋值给游标变量:

将声明游口号句放在游标赋值语句中,以下所示:

例13-5:上面给出一个详细完全的例子,在该例子中我们对DEALLOCATE命令将有加倍明晰的懂得。


你不用花费很多时间和金钱来培训现有的职工,或者去花大价钱雇用那些拥有各种证书的开发者。因为MySQL的维护和管理在很大程度上是“傻瓜型”的。

柔情似水 发表于 2015-1-19 11:12:55

也可谈一下你是怎么优化存储过程的?

飘飘悠悠 发表于 2015-1-24 13:18:23

varchar(max)\\\\nvarchar(max)类型的引入大大的提高了编程的效率,可以使用字符串函数对CLOB类型进行操作,这是一个亮点。

再现理想 发表于 2015-2-7 07:28:10

作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!

若天明 发表于 2015-2-21 01:19:57

不过话说回来了,绝大多数的性能优化准则与对sqlserver存储的结构理解息息相关

不帅 发表于 2015-3-6 19:32:51

sqlserver的痛苦之处在于有用文档的匮乏,很多只是表明的东西

再见西城 发表于 2015-3-13 06:35:45

发几份SQL课件,以飨阅者

变相怪杰 发表于 2015-3-20 15:19:09

我们学到了什么?思考问题的时候从表的角度来思考问
页: [1]
查看完整版本: MYSQL编程:封闭开释游标