Oracle 存储过程:游标坏了?

Oracle 存储过程:游标坏了?,oracle,stored-procedures,plsql,cursor,Oracle,Stored Procedures,Plsql,Cursor,我在某个地方读到,99%的时间你不需要使用光标 但是在下面的情况下,除了使用游标之外,我想不出其他方法 Select t.flag From Dual t; 假设返回4行“Y”或“N”。我希望程序在找到“Y”时触发某些内容。我通常在%NOTFOUND之前声明一个游标和循环。请告诉我有没有更好的办法 另外,如果你有任何想法,什么时候是使用光标的最佳时间 编辑:如果“Y”触发某个事件,我不想插入标志,而想做什么呢?这个例子没有太大意义 但是,您始终可以编写insert as select语句,而

我在某个地方读到,99%的时间你不需要使用光标

但是在下面的情况下,除了使用游标之外,我想不出其他方法

Select t.flag
From Dual t; 
假设返回4行“Y”或“N”。我希望程序在找到“Y”时触发某些内容。我通常在%NOTFOUND之前声明一个游标和循环。请告诉我有没有更好的办法

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


编辑:如果“Y”触发某个事件,我不想插入标志,而想做什么呢?

这个例子没有太大意义

但是,您始终可以编写insert as select语句,而不是我认为您正在描述的内容,例如:

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

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

你的案子肯定是99%

您可以使用insert into。。。选择这只是一个问题,或者进行一个选择,返回您想要插入的结果

如果要为每个“Y”插入一条记录,请使用where标志为“Y”的查询。如果根据是否至少有一个“Y”只想插入一条记录,则可以向查询中添加distinct


光标在使事情变得更复杂时很有用。例如,当需要在一个表中插入或更新记录时,我会使用游标,对于每个记录,我也会在其他几个表中插入或更新一个或多个记录。

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

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


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

在查询中添加where t.flag='Y。。。在tbl_标志值中插入,其中选择COUNT*FROM Dual t,其中t.flag='Y'>1MySQL、t-SQL和Dual/%NOTFOUND表示Oracle?是的,它是Oracle。很抱歉。。。正如我所编辑的,如果Select查询有“Y”,我会尝试触发,那么触发什么呢?如果它找到了“Y”,则放入一些已创建的值或执行某些操作?@sayhaha:那么您可以使用If exists从Dual中选择*,其中标志为“Y”。触发一些操作如何?如果它找到“Y”,则放入一些创建的值或执行某些操作?我不确定您要问什么,但在这种情况下,触发器不是您所需要的:p抱歉,让我们假设我运行select*from dual;它返回4行{'Y',N',N',Y'},然后因为系统找到了'Y',我想从表1中查询一个值并将其放入表2中。