Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle dbms_lock.sleep遇到代码时不工作_Oracle_Plsql_Delay_Sleep - Fatal编程技术网

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秒,然后插入行,然后立即执行下一个任务。我自己解决了这个问题。我没有
提交插入后的代码
更新
,因此直到代码结束时才插入行。