Oracle dbms_lock.sleep遇到代码时不工作
我使用了Oracle dbms_lock.sleep遇到代码时不工作,oracle,plsql,delay,sleep,Oracle,Plsql,Delay,Sleep,我使用了DBMS\u锁.sleep(50)代码中间。 但是,当我运行PL/SQL代码时。它看起来是在开始时运行“DBMS_LOCK.sleep”,而不是在睡眠代码之前执行代码 请建议一些解决方案,在PL/SQL代码中增加大约50秒的延迟。我怀疑您可能混淆了“执行”和“输出”。例如,如果我这样做: begin dbms_output.put_line('Line1'); dbms_lock.sleep(30); dbms_output.put_line('Line2'); end;
DBMS\u锁.sleep(50)代码>代码中间。
但是,当我运行PL/SQL代码时。它看起来是在开始时运行“DBMS_LOCK.sleep”,而不是在睡眠代码之前执行代码
请建议一些解决方案,在PL/SQL代码中增加大约50秒的延迟。我怀疑您可能混淆了“执行”和“输出”。例如,如果我这样做:
begin
dbms_output.put_line('Line1');
dbms_lock.sleep(30);
dbms_output.put_line('Line2');
end;
然后当运行时,我将在30秒内什么也看不到..然后在执行结束时看到两行都显示出来。但是“第1行”确实是在睡眠之前执行的,但是我们只在执行块的末尾看到输出
通过改变我们的输出,我们可以很容易地证明这一点
SQL> set serverout on
SQL> begin
2 dbms_output.put_line('I ran at '||to_char(sysdate,'HH24:MI:SS'));
3 dbms_lock.sleep(30);
4 dbms_output.put_line('and I ran at '||to_char(sysdate,'HH24:MI:SS'));
5 end;
6 /
I ran at 10:49:54
and I ran at 10:50:24
如果您的意图有点复杂,比如检查包或过程的每一行花费了多少时间,那么可以使用dbms_profiler。看看这个博客@Vijay Balebail:那个评论不属于这里。我让我的代码在表中插入一些行,然后等待50秒,让表对我插入的行执行一些处理,这样50秒后我可以执行更多任务。但它会在我的代码中等待50秒,然后插入行,然后立即执行下一个任务。我自己解决了这个问题。我没有提交代码>插入后的代码
和更新
,因此直到代码结束时才插入行。