回到另一次尝试。我正在试图找出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;
/
答案 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
给你时间百分之一秒。