1

plsqlで実行開始時刻と実行終了時刻の差を求める方法。

  SET SERVEROUTPUT ON;
DECLARE
  l_start_time DATE :=sysdate +1;
  l_end_time DATE   := SYSDATE;
  to_hours DATE;
BEGIN
  dbms_output.put_line(l_start_time);
  dbms_output.put_line(l_end_time);
  TO_HOURS:=TO_CHAR(L_END_TIME - to_date(L_START_TIME,'HH24:MI:SS'));
  dbms_output.put_line (TO_HOURS);
END ;

実行時間の差と出力が必要ですHH:MI:SS

4

3 に答える 3

3

DBMS_UTILITY.GET_TIME 関数を使用する必要があります。この関数は、現在の時刻を 100 分の 1 秒単位で決定します。このサブプログラムは、主に経過時間を判断するために使用されます。サブプログラムは、あるプロセスの開始時と終了時に 2 回呼び出され、最初の (前の) 数値が 2 番目の (後の) 数値から減算されて、経過時間が決定されます。例えば:

declare 
  v_end_time        number(10) ; 
  v_start_time      number(10) ; 
begin
   v_start_time := dbms_utility.get_time ;
   -- <Your code is here>
   null;
   --<\Your code is here>
   v_end_time :=  dbms_utility.get_time   ;

   dbms_output.put_line(  'Elapse Time= '|| to_char( (v_end_time - v_start_time) /100 ) ||' seconds.' );
end;
于 2017-02-06T14:42:10.470 に答える
2

差を数値として計算し、1 日の端数から計算できます。次のスクリプト例では、以下の出力が得られます

SET SERVEROUTPUT ON;
DECLARE
  l_start_time date := sysdate;
  l_end_time   date := SYSDATE+1;
  l_diff       number;
BEGIN
  dbms_output.put_line('start time='||l_start_time);
  dbms_output.put_line('end time  ='||l_end_time);
  l_diff :=l_end_time-l_start_time;
  dbms_output.put_line('a) difference days   ='||to_char(l_diff));
  dbms_output.put_line('a) difference hours  ='||to_char(l_diff*24));
  dbms_output.put_line('a) difference minutes='||to_char(l_diff*24*60));
  dbms_output.put_line('a) difference seconds='||to_char(l_diff*24*60*60));
  l_start_time := to_date('31/07/2012 20:00:00','DD/MM/YYYY HH24:MI:SS');
  l_end_time   := to_date('01/08/2012 04:15:44','DD/MM/YYYY HH24:MI:SS');
  l_diff :=l_end_time-l_start_time;
  dbms_output.put_line('b) difference days   ='||to_char(l_diff));
  dbms_output.put_line('b) difference hours  ='||to_char(l_diff*24));
  dbms_output.put_line('b) difference minutes='||to_char(l_diff*24*60));
  dbms_output.put_line('b) difference seconds='||to_char(l_diff*24*60*60));
END ;
/

出力先:

start time=31-JUL-12
end time  =01-AUG-12
a) difference days   =1
a) difference hours  =24
a) difference minutes=1440
a) difference seconds=86400
b) difference days   =.3442592592592592592592592592592592592593
b) difference hours  =8.26222222222222222222222222222222222222
b) difference minutes=495.733333333333333333333333333333333333
b) difference seconds=29744
于 2012-07-31T20:17:47.353 に答える
-1

次のコードを試してください

TO_HOURS:= L_END_TIME - L_START_TIME;
dbms_output.put_line (to_char(TO_HOURS, "your format"));
于 2012-07-31T08:29:06.137 に答える