游标与SQL中的过程

时间:2010-06-16 14:21:23

标签: sql

所以,我刚刚了解了CURSORS,但仍然没有完全掌握它们。游标和程序甚至函数之间有什么区别?

到目前为止,各种示例(DECLARE CURSOR ... SELECT ... FROM ...)它最多似乎是一个保存查询的变量。数据是实时的,还是声明光标的快照?

即。 我有一个表有一行和一个col值为2。 我做DECLARE CURSOR ... SELECT * FROM table1 然后我插入一个值为3的新行。

当我运行游标时,我会在声明游标之前获取一行,还是两行?

由于

6 个答案:

答案 0 :(得分:5)

我建议稍微研究一下“基于设置”与“基于行”。 This article做得不错。

大多数数据库系统都面向执行基于集合的操作。因此,在执行基于行的操作(例如使用游标)时,您经常会看到性能问题。根据我的经验,很多使用游标的sql都可以在没有游标的情况下重写。

在您询问光标的示例中,只有一条记录。

另外,请记住,存储过程可以使用游标。

答案 1 :(得分:1)

我相信the documentation会回答你的一些问题。仔细阅读“不敏感”等不同选项,看看它们的含义。

另外,作为一般规则,使用游标是不赞成的。在进入光标路径之前,您应该始终尝试找到“基于集合”的解决方案。关于这个主题的辩论和文献也很多,很容易获得。

答案 2 :(得分:1)

我的建议是忘记你学习了游标的语法。游标是最后的技术,只应由专家来使用,该专家会说明游标对性能的影响以及基于集合的替代方案在其特定情况下不起作用的原因。如果您了解集合操作,那么在游标中完成的大多数事情都可以通过基于集合的方式轻松完成。此链接将帮助您了解您需要了解的内容,以便您很少需要编写光标:

http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them

答案 3 :(得分:0)

CURSOR: 做一些要逐行完成的事情,而不是简单的查询 例如,如果您有一个临时表来存储类别的层次结构,那么光标可以用来填充它

过程或存储过程可以包含sql语句(包括游标)的集合。当通过传递params(如果有的话)执行时,它将执行其中的语句

答案 4 :(得分:0)

函数或过程是一组执行某些任务的指令。 游标是一个可以存储查询结果集的数组。

答案 5 :(得分:0)

存储过程是预编译的对象,并作为大量语句执行,而游标则用于逐行执行。

例如:你可以像游戏一样使用游标(游标类似于指向这么多行中的单行的指针),并且只要你需要,就可以在程序中运行查询的所有结果。结果,只需打开包并逐行查找结果。