sysmsstamp的dbms_output,以毫秒为单位

时间:2015-07-26 17:43:02

标签: oracle

我的目标是dbms_output pl / sql块内的时间差(以毫秒为单位),如代码所示。现在,dbms_output结果为0,这不是真的。我知道我必须应用一些转换函数才能获得正确的时差,但我无法解决它。谁可以帮我这个事?我非常感谢你的帮助!

create table city
(cityid numeric(10),
cityname varchar2(20),
cityregion VARCHAR(20),
citypopulation INT,
constraint city_pk primary key (cityid));

declare
c_id  number := 0 ;
c_name varchar2(30) ;
c_region varchar2(30);
c_pop number;
cityid_copy city.cityid%TYPE;
time_before timestamp;
time_after timestamp;
begin
while (c_id <= 30000000)
loop
c_name    := 'City' || c_id;
c_region  := 'Region' || c_id;
c_pop     := c_id + 500;

insert into city
(cityid,cityname,cityregion,citypopulation)
values(c_id,c_name,c_region,c_pop);
c_id := c_id +1;
end loop;
time_before := systimestamp;
select cityid into cityid_copy from city
where cityid = 3000000;
time_after := systimestamp;
dbms_output.put_line((time_after)-(time_before));
end; 

1 个答案:

答案 0 :(得分:0)

代码比操作系统时间戳精度快。在许多操作系统上SYSTIMESTAMP只精确到千分之一秒。

SQL> select to_char(systimestamp, 'FF9') fractional_seconds from dual;

FRACTIONA
---------
711000000

SQL> select to_char(systimestamp, 'FF9') fractional_seconds from dual;

FRACTIONA
---------
715000000

SQL> select to_char(systimestamp, 'FF9') fractional_seconds from dual;

FRACTIONA
---------
718000000

如果您将dbms_lock.sleep(0.1);添加到代码中,结果将不再为零。

据我所知,这个问题没有解决方法。在这些平台上,没有办法测量不到千分之一秒的东西。虽然如果真的花了很多时间,那么它可能无论如何都不需要进行测量。