문제

내 PL/SQL 지속 시간 기능이 올바르게 작동하지 않는 이유는 무엇입니까? 아래 쿼리에서 아래 함수와 동일한 방식으로 'HH : MM'을 수동으로 계산합니다. 그러나 다른 결과를 얻습니다.

쿼리 호출 :

WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
SELECT TRUNC (24 * durdays) AS durhrs,
       MOD (TRUNC (durdays * 1440), 60) AS durmin,
       steven.duration (SYSDATE - (95 / 1400), SYSDATE) duration
  FROM durdays

산출:

durhrs:   1
durmin:   35
duration: '1:38'

기능 코드 :

CREATE OR REPLACE FUNCTION steven.duration (d1 IN DATE, d2 IN DATE)
   RETURN VARCHAR2 IS
   tmpvar   VARCHAR2 (30);
   durdays   NUMBER (20,10); -- Days between two DATEs
   durhrs   BINARY_INTEGER; -- Completed hours
   durmin   BINARY_INTEGER; -- Completed minutes
BEGIN
   durdays   := d2-d1; 
   durhrs   := TRUNC(24 * durdays);   
   durmin   := MOD (TRUNC(durdays * 1440), 60);
   tmpvar   := durhrs || ':' || durmin;
   RETURN tmpvar;
END duration;
/
도움이 되었습니까?

해결책

나는 당신이 작은 오타가있을 수 있다고 생각합니다.

WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
                                                   ^^^^
SELECT TRUNC (24 * durdays) AS durhrs,
       MOD (TRUNC (durdays * 1440), 60) AS durmin,
       lims_sys.duration (SYSDATE - (95 / 1400), SYSDATE) duration
                                          ^^^^

이것이 고정되면 괜찮습니다.

SQL> WITH durdays AS (SELECT SYSDATE - (SYSDATE - (95 / 1440)) AS durdays FROM DUAL)
  2  SELECT TRUNC (24 * durdays) AS durhrs,
  3         MOD (TRUNC (durdays * 1440), 60) AS durmin,
  4         duration (SYSDATE - (95 / 1440), SYSDATE) duration
  5    FROM durdays
  6  ;

    DURHRS     DURMIN DURATION
---------- ---------- ----------------
         1         34 1:34

다른 팁

sql>set time on 

그런 다음 다음과 같은 프롬프트를 얻을 수 있습니다.

20:24:35 sql> select count(*) from v$session;

count(*)
-----------
78

20:24:50 sql>

이제 쿼리 지속 시간이 15sec의 것임을 알게 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top