Oracle SQL迭代

bjg7j2ky  于 2023-06-05  发布在  Oracle
关注(0)|答案(2)|浏览(234)

假设我在Oracle中有一个SQL查询。
我有一个表'table_1',其中有一个名为Status的列,它有一行可以具有值'Done'或'NotDone'。
“状态”列中的值将自动更新,具体取决于我查看它的时间。
我想要的是一个每5分钟检查一次table_1的查询,直到列Status得到值'Done',然后我希望将其作为输出。
如果Status列的值仍然是'Notdone',我想继续迭代,直到它的值是'Done'
最好的问候
假设我在Oracle中有一个SQL查询。
我有一个表'table_1',其中有一个名为Status的列,它有一行可以具有值'Done'或'NotDone'。

kpbwa7wx

kpbwa7wx1#

尝试以下操作:

DECLARE
  Status VARCHAR2(10);
BEGIN
  SELECT Status INTO Status FROM table_1;

  LOOP
    EXIT WHEN Status = 'Done';
  
    DBMS_LOCK.SLEEP(5); -- 5 seconds
  
    SELECT Status INTO Status FROM table_1;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('FinalStatus: ' || Status);
END;
3zwjbxry

3zwjbxry2#

你想要什么样的输出?这是主要的问题。主要是,当我必须定期检查某些东西时,我会这样做:

declare
  v_n number
begin
  loop
    select count(*) into v_n
    where status='DONE' and ... --- other conditions
      and rownum<=1; --- to avoid scanning the whole table for more rows once one is found
    if v_n>=1 then
      exit;
    end if;
    dbms_lock.sleep(180); --- seconds to wait
  end loop;
  --- do whatever needs to be done when the condition is satisfied 
  ...
end;

我真的不明白你怎么会喜欢这样的输出。我不认为将其包含在函数f_check_done中,然后从dual中选择f_check_done并让用户无限期等待是一个好主意。也许调用一个过程来发送邮件。或者使用dbms_alert在数据库中发出警报。一切都取决于你实际需要什么

相关问题