3

我在某处读到 99% 的时间不需要使用光标。

但除了在以下情况下使用光标之外,我想不出任何其他方式。

Select t.flag
From Dual t; 

假设这会返回 4 行的'Y'or 或'N'。我希望该过程在找到'Y'. 我通常声明一个游标并循环直到%NOTFOUND。请告诉我是否有更好的方法。

另外,如果您有任何想法,什么时候是使用光标的最佳时间?

编辑:而不是插入标志,如果我想做“如果'Y'然后触发某事”怎么办?

4

4 回答 4

2

像这样的东西:

INSERT INTO TBL_FLAG (col)
SELECT ID FROM Dual where flag = 'Y'

当使用基于集合而不是过程操作时,您通常会看到性能提升,因为大多数现代 DBMS 都设置为执行基于集合的操作。你可以在这里阅读更多。

于 2012-06-05T21:47:30.083 回答
2

你的情况肯定属于99%。

您可以使用insert into ... select.... 这只是一个select返回您要插入的结果的问题或创建一个。

如果要为每个记录插入一条记录,请'Y'使用where flag = 'Y'. 如果您只想根据是否至少有一条记录来插入一条记录'Y',那么您可以添加distinct到查询中。

当您使事情变得更复杂时,光标很有用。例如,当需要在一个表中插入或更新记录时,我使用游标,并且还为每条记录插入或更新一条或多条记录到其他几张表中。

于 2012-06-05T21:56:32.100 回答
1

好吧,这个例子不太有意义..

但是你总是可以写一个insert as select陈述而不是我认为你所描述的

于 2012-06-05T21:45:47.703 回答
0

当一个表中的列值将在不同表的多个查询中重复使用时,最好使用游标。

假设 id_test 列的值是使用游标 CUR_TEST 从 MY_TEST_TBL 获取的。现在这个 id_test 列是 MY_TEST_TBL 中的一个外键。如果我们想使用 id_test 来插入或更新表 A_TBL、B_TBL 和 C_TBL 中的任何行,那么在这种情况下最好使用游标而不是使用复杂的查询。

希望这可能有助于理解游标的用途

于 2014-03-11T09:53:54.657 回答