【问题标题】:Oracle Pl/SQL loop to return only when record gets inserted into a tableOracle Pl/SQL 循环仅在记录插入表时返回
【发布时间】:2019-08-23 11:54:09
【问题描述】:

我的要求是编写一个只有在记录被插入到表中时才完成执行的块,通常我会在下面做的事情

set serveroutput on;
DECLARE
l_output NUMBER;
BEGIN
select count(*)  INTO l_output from TABLE_NAME where COLUMNNAME = 'DUMMY' and COLUMNNAME1= 'DUMMY1';
FOR i IN 0..l_output 
LOOP
DBMS_OUTPUT.PUT_LINE(l_output);
EXIT WHEN l_output=1;
END LOOP;
END;

但是如果 SQL 语句没有返回任何记录,则此代码块将停止执行我希望此块执行,直到 count(*)>1 再次变为真我知道这可能导致此块无限期地等待,直到将记录插入此表中。想法是如果不满足count(*)>1 条件,则块应继续执行或等待count(*)>1 条件变为真。

【问题讨论】:

  • 这个脚本有什么需要?它是否用于某种监控?您是否要持续监控在控制台中运行的此脚本?如果您告诉我们您想要实现的目标,可能还有其他几种方法可以解决此问题。

标签: oracle plsql oracle12c


【解决方案1】:

您需要LOOPEXITWAIT,如下所示:

set serveroutput on;
DECLARE
l_output NUMBER;
BEGIN
LOOP
select count(1)  INTO l_output from TABLE_NAME where COLUMNNAME = 'DUMMY' and COLUMNNAME1= 'DUMMY1';
DBMS_OUTPUT.PUT_LINE(l_output);
EXIT WHEN l_output>=1; -- >= is used to avoid infinite loop 
DBMS_LOCK.sleep(1); -- sleep for 1 second, You can change the wait time accordingly
END LOOP;
END;

干杯!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多