dbms_lock.sleep遇到代码时无法正常工作

use*_*168 -1 oracle plsql sleep delay

DBMS_LOCK.sleep(50);在代码中间使用过.

但是,当我运行PL/SQL代码时.看起来它在开始时运行'DBMS_LOCK.sleep`而不是在睡眠代码之前执行代码.

请建议一些解决方案,在PL/SQL代码中添加大约50秒的延迟.

Con*_*ald 6

我怀疑你可能会混淆"执行"与"输出".例如,如果我这样做:

begin
  dbms_output.put_line('Line1');
  dbms_lock.sleep(30);
  dbms_output.put_line('Line2');
end;
Run Code Online (Sandbox Code Playgroud)

然后在运行时,我将看不到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
Run Code Online (Sandbox Code Playgroud)