【问题标题】:Change SELECT of closed (but not deallocated) CURSOR更改已关闭(但未解除分配)CURSOR 的 SELECT
【发布时间】:2018-04-09 10:43:44
【问题描述】:

我找到了这个声明here

"关闭一个游标后,程序可以再次打开它,这意味着 DBMS 重新评估相同的查询或不同的查询,并且 构建一个新的结果集。”

您可以在 SQL Server 中执行此操作吗?我在 Transact-SQL 游标页面上没有找到与此相关的任何内容。

其他 DBMS 是否支持这样的功能?

【问题讨论】:

  • 一般来说,你不应该首先使用光标。他们有自己的位置,但非常罕见。
  • 你可以这样做rextester.com/AZZS83915
  • 使用 Martin 的示例,将第二个查询从 sys.sysobjects 更改为 sys.sysindexes 并且您已经更改了原始结构。
  • 感谢您的评论,Sean Lange,但它回答了不同的问题。我会记住这一点,谢谢!
  • 我明白了,所以你可以通过使用游标变量来做到这一点。感谢马丁·史密斯和李·珠穆朗玛峰!但是是否可以使用 DECLARE crs CURSOR 声明服务器游标,处理其结果集,关闭它(而不是 DEALLOCATE)并更改其 SELECT?

标签: mysql sql sql-server oracle cursor


【解决方案1】:

FWIW。对于 SQL 服务器。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/close-transact-sql

CLOSE 保留可重新打开的数据结构,但会获取 在重新打开游标之前,不允许定位更新。 CLOSE 必须在打开的游标上发出; CLOSE 不允许 仅声明或已关闭的游标。

语法

CLOSE { { [ GLOBAL ] cursor_name } | cursor_variable_name }

参数

全球

指定 cursor_name 引用全局游标。

光标名称

是打开游标的名称。如果同时存在以 cursor_name 为名称的全局游标和局部游标,则指定 GLOBAL 时,cursor_name 指的是全局游标;否则,cursor_name 指的是本地游标。

cursor_variable_name

是与打开的游标关联的游标变量的名称。

【讨论】:

  • 我的问题是是否在关闭游标之后,但在释放它之前,您可以更改其 SELECT 语句,即您在游标的 DECLARE 语句中使用的语句。我提供的链接清楚地表明这是可能的,但我没有找到在 SQL Server 中执行此操作的方法。我很好奇其他 DBMS 是否支持这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-02
  • 2021-10-16
  • 1970-01-01
  • 2011-03-14
  • 2011-03-11
  • 1970-01-01
  • 2017-12-28
相关资源
最近更新 更多