问题标签 [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.

0 投票
11 回答
33289 浏览

sql - 为什么基于关系集的查询比游标更好?

在用 TSQL 或 PLSQL 编写数据库查询时,我们通常可以选择使用游标遍历行来完成任务,或者制作一个一次性完成相同工作的 SQL 语句。

此外,我们可以选择简单地将大量数据拉回我们的应用程序,然后使用 C#、Java 或 PHP 或其他方式逐行处理它。

为什么使用基于集合的查询更好?这种选择背后的理论是什么?什么是基于游标的解决方案及其关系等价物的一个很好的例子?

0 投票
2 回答
2881 浏览

oracle - PLS-00306(错误的参数数量或类型)调用游标

我想我可能在这里遗漏了一些东西。这是触发器的相关部分:

这是我要回来的错误消息,

如果我正确理解了文档,那应该可以,但是既然不是,我一定是做错了什么。有任何想法吗?


@ Matthew - 我很感激你的帮助,但我感到困惑的原因是这段代码对我不起作用并且引发了引用的错误。我们在数据库中有其他触发器的代码几乎完全一样,所以我不确定这是我做错了什么,还是我试图存储触发器的方式等等。


@Matthew -好吧,现在我感到很尴尬。我将您提供的代码复制/粘贴到新触发器中,效果很好。所以我回到原来的触发器并尝试它并再次收到错误消息,除了这次我开始从触发器中删除东西并且在摆脱这条线之后,

东西保存得很好。所以事实证明,我认为错误在哪里,实际上并不是错误在哪里。

0 投票
11 回答
74334 浏览

sql-server - 为什么在 SQL Server 中使用游标被认为是不好的做法?

早在 SQL 7 天我就知道一些性能原因,但是在 SQL Server 2005 中是否仍然存在相同的问题?如果我在存储过程中有一个我想单独操作的结果集,那么游标仍然是一个糟糕的选择吗?如果是这样,为什么?

0 投票
8 回答
2029 浏览

sql - 可能与光标/加入有关的问题

这是我的情况:

表一包含一组使用 id 作为唯一标识符的数据。该表与大约 6 个其他表具有一对多关系。

给定 Id 为 001 的表 1:表 2 可能有 3 行外键:001 表 3 可能有 12 行外键:001 表 4 可能有 0 行外键:001 表 5 可能有 28 行外键: 001

我需要编写一份报告,列出指定时间范围内表 1 中的所有行,然后是引用它的少数表中包含的所有数据。

我当前的伪代码方法如下所示:

这意味着单个报告可以在 1000 个查询附近运行。我知道这太过分了,但是我的 sql-fu 有点弱,我可以使用一些帮助。

0 投票
3 回答
26553 浏览

sql-server - 游标与 while 循环 - 游标的优点/缺点是什么?

使用 while 循环而不是游标是个好主意吗?

游标的优点/缺点是什么?

0 投票
8 回答
15264 浏览

sql - 重置@@FETCH_STATUS 存储过程

如何@@FETCH_STATUS在存储过程中重置变量或将其设置为 0?

此外,您可以将 FETCH_STATUS 绑定到特定游标吗?

0 投票
5 回答
20741 浏览

sql - 有没有办法在 SQL Server 中获取打开/分配的游标列表?

我有一个创建和打开一些游标的存储过程。它在最后关闭它们,但如果遇到错误,这些游标将保持打开状态!然后,当它尝试创建游标时,后续运行会失败,因为具有该名称的游标已经存在。

有没有办法可以查询存在哪些游标以及它们是否打开,以便我可以关闭并释放它们?我觉得这比盲目地试图关闭和吞下错误要好。

0 投票
13 回答
107136 浏览

sql - 为什么人们如此讨厌 SQL 游标?

我可以理解由于开销和不便而想要避免使用光标,但看起来有一些严重的光标恐惧症正在发生,人们会竭尽全力避免使用光标。

例如,一个问题询问如何用游标做一些明显微不足道的事情,并且接受的答案是使用带有递归自定义函数的公用表表达式 (CTE) 递归查询提出的,即使这将可以处理的行数限制为 32 (由于 sql server 中的递归函数调用限制)。这让我觉得这是一个糟糕的系统寿命解决方案,更不用说为了避免使用简单的光标而付出的巨大努力。

这种疯狂仇恨的原因是什么?是否有一些“著名的权威”发布了针对游标的教令?游标的心中是不是潜伏着某种无法言喻的邪恶,败坏了孩子们的品德之类的?

维基问题,对答案比代表更感兴趣。

相关信息:

SQL Server 快进游标

编辑:让我更准确地说:我知道不应使用游标代替正常的关系操作;这很简单。我不明白的是,即使光标是一个更简单和/或更有效的解决方案,人们也会竭尽全力避免光标,就像他们有笨蛋或其他东西一样。让我困惑的是非理性的仇恨,而不是明显的技术效率。

0 投票
8 回答
26488 浏览

oracle - SELECT COUNT(*) 与使用显式游标获取两次

我读过 Steven Feuerstein 和 Bill Pribyl 的书,书名是“Oracle PL SQL Programming”(第 2 版)。在第 99 页,有一点建议是

不要从表中“SELECT COUNT(*)”,除非您确实需要知道“命中”的总数。如果您只需要知道是否有多个匹配项,只需使用显式游标获取两次即可。

您可以通过提供示例向我进一步解释这一点吗?谢谢你。

更新:

正如 Steven Feuerstein 和 Bill Pribyl 建议我们不要使用 SELECT COUNT() 来检查表中的记录是否存在,任何人都可以帮我编辑下面的代码以避免使用显式游标来使用 SELECT COUNT(*) 吗?此代码是在 Oracle 存储过程中编写的。

我有一个表 emp(emp_id, emp_name, ...),所以要检查提供的员工 ID 是否正确:

0 投票
5 回答
14766 浏览

oracle - 在oracle中将where子句动态添加到游标

我有接受某些参数的 plsql 程序,例如 v_name、v_country、v_type。

我希望有一个带有这样的选择语句的游标:

如果某些参数为空,我只能将相关的 where 子句添加到游标吗?还是有更好的方法来实现这一点?