存储过程:游标错误



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

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

Select t.flag
From Dual t; 

假设这返回 4 行 'Y''N' 。我希望该程序在找到'Y'时触发某些内容.我通常声明一个游标和循环,直到%NOTFOUND.请告诉我是否有更好的方法。

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

编辑:而不是插入标志,如果我想做"如果'Y'然后触发某些东西"怎么办?

您的情况肯定属于 99%。

您可以使用 insert into ... select... 轻松进行条件插入。这只是一个问题或制作一个返回您要插入的结果的select

如果要为每个'Y'插入一条记录,请使用带有 where flag = 'Y' 的查询。如果只想根据是否至少有一个'Y'插入单个记录,则可以向查询添加distinct

当您使某些内容更复杂时,光标很有用。例如,当需要在一个表中插入或更新记录时,以及对于每条记录,我也使用游标将一个或多个记录插入或更新到其他几个表中。

像这样:

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

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

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

但是你总是可以写一个insert as select语句,而不是我认为你在描述的内容

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

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

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

最新更新