增加SQL循环时间?

时间:2015-03-20 11:38:46

标签: sql oracle

回到另一次尝试。我正在试图找出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;
/

1 个答案:

答案 0 :(得分: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给你时间百分之一秒。