我在某处读到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 中的任何行,那么在这种情况下,最好使用游标而不是使用复杂查询。
希望这可能有助于理解游标的用途