我在某处读到99%的时间你不需要使用游标。存储过程:光标不好?
但我想不出在这种情况下使用游标的其他方式。
Select t.flag
From Dual t;
比方说,这回4行要么'Y'
或'N'
的。如果发现'Y'
,我希望程序触发某些内容。我通常会声明一个游标并循环,直到%NOTFOUND
。请告诉我,如果有更好的方法。
此外,如果您有任何想法,什么时候使用光标的最佳时机?
编辑:除了插入标志的,如果我想要做什么“如果'Y'
然后触发一些”?
我在某处读到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 as select
语句而不是什么我想你所描述
事情是这样的:
INSERT INTO TBL_FLAG (col)
SELECT ID FROM Dual where flag = 'Y'
你会通常在使用基于集合而不是程序操作时会看到性能增益,因为大多数现代DBMS都设置为执行基于集合的操作。你可以阅读更多here。
当一个表的列值将被重复用于不同表上的多个查询时,最好使用游标。
假设使用游标CUR_TEST从MY_TEST_TBL获取id_test列的值。现在这个id_test列是MY_TEST_TBL中的外键。如果我们想使用id_test插入或更新表A_TBL,B_TBL和C_TBL中的任何行,那么在这种情况下,最好使用游标而不是使用复杂查询。
希望这可能有助于了解光标的目的
http://wiki.lessthandot.com/index.php/Cursors_and_How_to_Avoid_Them – HLGEM
http://stackoverflow.com/questions/1479680/ms-sql-server -when-a-cursor-good/1479751#1479751 – HLGEM
在你的查询中添加一个'where t.flag ='Y''? ...MySQL INSERT INTO tbl_flag()VALUES()WHERE(SELECT COUNT(*)FROM Dual t其中t.flag ='Y')> 1' –