问题标签 [database-cursor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tsql - T-SQL:在更新触发器中 CLOSE/DEALLOCATE 游标的正确方法
假设我有这样的触发器:
我想确保 Cursor1 总是关闭和释放。甚至 myProc1 或 myProc2 也会失败。
我应该使用 try/catch 块吗?
python - 我是否需要多个游标对象来循环记录集并同时更新?
因此,我有一个无法立即保存在内存中的大型数据库。我必须遍历表中的每个项目,对其进行处理,然后将处理后的数据放入表中的另一列。
当我在游标上循环时,如果我尝试运行更新语句,它会截断记录集(我相信是因为它重新利用了游标对象)。
问题:
创建第二个游标对象来运行更新语句是否允许我继续循环原始选择语句?
我是否需要第二个与数据库的连接才能拥有第二个游标对象,这将允许我这样做吗?
sqlite 将如何响应与数据库的两个连接,一个从表中读取,另一个向它写入?
我的代码(简化):
我尝试的另一种方法是将我的 select 语句修改为:
然后我会这样做:
我遇到的问题是我真正的select 语句中有一个 JOIN 并且需要一段时间,因此多次执行 JOIN 非常耗时。我试图通过只做一次选择来加快这个过程,然后使用一个生成器,这样我就不必把它全部保存在内存中。
解决方案:
好的,所以我的前两个问题的答案是“否”。对于我的第三个问题,一旦与数据库建立连接,它就会锁定整个数据库,因此在第一个连接关闭之前,另一个连接将无法执行任何操作。
我找不到它的源代码,但从经验证据来看,我相信连接一次只能使用一个游标对象,并且最后一次运行查询优先。这意味着,当我循环选择的记录集一次产生一行时,一旦我运行我的第一个更新语句,我的生成器就会停止产生行。
我的解决方案是创建一个临时数据库,我将已处理的内容与 id 一起插入,以便每个数据库都有一个连接/光标对象,并且可以继续循环遍历选定的记录集,同时定期插入临时数据库。一旦我到达我选择的记录集的末尾,我就会将临时数据库中的数据传输回原始数据库。
如果有人确切知道连接/光标对象,请在评论中告诉我。
sql - MS SQL Server - CURSOR 什么时候好?
很多时候,当我编写存储过程等时,我首先使用 CURSOR,后来发现我的过程存在一些性能问题。
我读到的每一篇文章都说 CURSORS 很糟糕,会导致不必要的锁定等,性能测试也证明了这一点。
我的问题是您何时使用 CURSOR 以及在什么情况下它们有用或有用?
如果没有用,他们为什么要为 SQL 制作如此糟糕的控制结构/类型?
sql - 我可以遍历 T-SQL 中的表变量吗?
无论如何要遍历 T-SQL 中的表变量吗?
我也使用游标,但游标似乎不如表变量灵活。
我希望能够以与游标相同的方式使用表变量。这样,我可以在过程的一部分中对表变量执行一些查询,然后为表变量中的每一行执行一些代码。
任何帮助是极大的赞赏。
sql - 不使用游标的每一行的 SQL 调用存储过程
如何在不使用游标的情况下为表中的每一行调用存储过程,其中行的列是 sp 的输入参数?
mysql - 在 MySQL 中循环遍历结果集
我正在尝试在 MySQL 中编写一个存储过程,它将执行一个简单的选择查询,然后循环遍历结果以确定是执行其他查询、数据转换还是完全丢弃数据。实际上,我想实现这一点:
只是,我只想要它在 MySQL 中,所以它可以作为一个过程来调用。我知道对于触发器,有FOR EACH ROW ...
语法,但我找不到在CREATE TRIGGER ...
语法之外使用类似的东西。我已经阅读了 MySQL 中的一些循环机制,但到目前为止,我所能想象的是我将实现这样的东西:
虽然这在我的脑海里有些朦胧。
作为参考,虽然我认为它不一定相关,但初始查询将连接四个表以形成分层权限模型,然后根据特定权限在链上的高度,它将检索有关的附加信息应该继承该权限的孩子。
php - 游标状态无效,SQLExecDirect 中的 SQL 状态 24000
我需要在PHP中通过ODBC依次调用两个存储过程:
在第二次存储过程调用后,我在 PHP 中收到此错误:
警告:odbc_exec() [function.odbc-exec]:SQL 错误:[unixODBC][FreeTDS][SQL Server]游标状态无效,SQLExecDirect 中的 SQL 状态 24000
如果我重新安排我调用存储过程的顺序,它总是第二个错误。有没有办法,idk,在调用之间重置光标位置?有点不合我意。
python - 如何高效使用 MySQLDB SScursor?
我必须处理一个大的结果集(可能是数十万行,有时更多)。
不幸的是,它们需要一次全部检索(在启动时)。
我试图通过使用尽可能少的内存来做到这一点。
通过查看 SO,我发现 usingSSCursor
可能是我正在寻找的东西,但我仍然不知道如何准确地使用它们。
从基本游标或 SScursor执行fetchall()
是否相同(就内存使用而言)?
我可以从 sscursor 中逐个(或逐个)“流式传输”我的行吗?如果可以,最有效的方法是什么?
java - 用 jdbc 澄清 oracle 中的游标
我遇到的情况是,我正在使用的第 3 方开源产品在 Oracle 中用完游标并收到错误:java.sql.SQLException: ORA-01000: maximum open cursors exceeded
我的最大游标设置为 1000,我试图确定达到此限制的代码是否执行错误,或者我是否只是需要增加限制。
经过一番调查,我在代码中发现了一个创建 ResultSet 的点,从而将我的打开游标计数增加了 1。但是,该 ResultSet 在使用后很快就关闭了....但是游标计数仍然存在。我能够在第 3 方开源项目之外的简单 JDBC 应用程序中重现逻辑。
我发现一些 Oracle 文档让我认为如果关闭 ResultSet 和 PreparedStatements,所有打开的游标都会关闭,但我的打开游标似乎一直在徘徊。请参阅此常见问题解答 ( http://download.oracle.com/docs/cd/B10501_01/java.920/a96654/basic.htm#1006509 ),其中显示“关闭结果集或语句会释放数据库中的相应游标”。仅基于我的测试似乎没有发生,所以我一定缺乏一些基本的了解。
任何人都可以解释 Oracle 如何处理游标或指向一些可以启发我的文档吗?
谢谢!
oracle - Oracle PLSQL - 在不存在的表上声明游标
我想在一个不存在的表上声明一个游标。当然,我的程序没有编译。
该表是临时表,由预处理创建。它将存在于运行时,但在编译时是另一回事。
对于我的选择/更新其他 DML 操作,我使用过
EXECUTE IMMEDIATE 'operation from tmp_table'
但我找不到游标的解决方法。
有办法吗?
基本上,我希望这个编译
更新
到目前为止没有编译:
应该使用 CREATE PROCEDURE,谢谢。
提前致谢。