【问题标题】:Increase SQL loop time?增加 SQL 循环时间?
【发布时间】:2015-03-20 11:38:45
【问题描述】:

返回再次尝试。我试图弄清楚 dbms_utility 获取时间,并想尝试一下以测试水域。为了正确执行此操作,我需要循环花费一些时间来完成,我当前的所有尝试都在不到一秒的时间内执行,因此只返回“0”。关于如何使循环更有效的任何提示?我无法使用 dbms_lock,所以我不能让它休眠。

create or replace procedure my_proc
as v_start number; 
v_end number;
v_total_time number;
v_amount number;
begin
for i in 1 .. 1500 loop
v_amount := 10 * 10;
v_amount := 10 / 10;
end loop;
v_start := dbms_utility.get_time;
v_end:= dbms_utility.get_time;
v_total_time := v_end - v_start;  
dbms_output.put_line('total time ='||v_total_time);
end;
/

【问题讨论】:

标签: sql oracle


【解决方案1】:

您可以使用更大的循环或在其中执行更复杂的工作,但也可以使用 Java 存储过程来执行睡眠:

create or replace procedure my_sleep(p_sleep in number) as
language java name 'java.lang.Thread.sleep(long)';
/

这不需要dbms_lock 或任何其他权限。

那么你的测试可以是:

create or replace procedure my_proc as
  v_start number; 
  v_end number;
  v_total_time number;
begin
  v_start := dbms_utility.get_time;
  my_sleep(1800);
  v_end:= dbms_utility.get_time;
  v_total_time := v_end - v_start;  
  dbms_output.put_line('total time ='||v_total_time);
end;
/

得到:

set serveroutput on
exec my_proc;

anonymous block completed
total time =182

my_sleep 的参数以毫秒为单位; get_time 为您提供百分之一秒的时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2019-12-16
    相关资源
    最近更新 更多