我在某处读到了99%的时间你不需要使用游标。
但在以下情况下,除了使用游标之外,我无法想到任何其他方式。
Select t.flag
From Dual t;
让我们说这会返回4行'Y'
或'N'
。如果找到'Y'
,我希望该过程触发某些内容。我通常声明一个游标并循环直到%NOTFOUND
。请告诉我是否有更好的方法。
另外,如果您有任何想法,何时是使用光标的最佳时间?
编辑:如果我想做"如果'Y'
然后触发某些内容" , ,而不是插入标志? p>
答案 0 :(得分:2)
这样的事情:
INSERT INTO TBL_FLAG (col)
SELECT ID FROM Dual where flag = 'Y'
使用基于集合而不是过程操作时,通常会看到性能提升,因为大多数现代DBMS都设置为执行基于集合的操作。您可以阅读更多here。
答案 1 :(得分:2)
你的案件肯定属于99%。
您可以使用insert into ... select...
轻松完成条件插入。这只是一个问题,或者使select
返回您想要插入的结果。
如果要为每个'Y'
插入一条记录,请使用where flag = 'Y'
的查询。如果您只想根据是否至少有一个'Y'
插入单个记录,则可以向查询添加distinct
。
当你制作更复杂的东西时,光标很有用。例如,我需要在一个表中插入或更新记录时使用游标,并且还为每个记录插入或将一个或多个记录更新到其他几个表中。
答案 2 :(得分:1)
嗯,这个例子没有多大意义..
但你总是可以写一个insert as select
语句,而不是我认为你在描述的语句
答案 3 :(得分:0)
当在一个表中的列值将在不同表的多个查询中重复使用时,最好使用游标。
假设使用游标CUR_TEST从MY_TEST_TBL获取id_test列的值。现在这个id_test列是MY_TEST_TBL中的外键。如果我们想使用id_test插入或更新表A_TBL,B_TBL和C_TBL中的任何行,那么在这种情况下,最好使用游标而不是使用复杂查询。
希望这可能有助于理解游标的目的