0

plsql 프로그래밍에서 두 날짜를 비교하는 데 어려움이 있습니다.저장 프로 시저 날짜 쿼리가 작동하지 않습니다.

2 개의 저장 프로 시저가 있습니다. 첫 번째 저장 프로 시저에서는 날짜 열을 OUT param으로 반환합니다. 첫 번째 출력 매개 변수를 두 번째 저장 프로 시저의 입력 매개 변수로 전달하고 있습니다.

하지만 내 쿼리가 올바른 값을 반환하지 않습니다.

저장 프로 시저 # 1 :

PROCEDURE SP_FIRST_COMPLETE(TASK_ID IN VARCHAR2, FIRST_COMPLETE_DT OUT DATE) 
IS 

... 
BEGIN 
... 
... 
DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT); 
..... 
end; 

저장 프로 시저 # 2 :

PROCEDURE SP_NOT_FIRST_COMPLETE(TASK_ID IN VARCHAR2, FIRST_COMPLETE_DT IN DATE, FIRST_COMPLETE_DT1 OUT DATE) 
IS 
.... 
BEGIN 
DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT); 

FOR R_ROW IN (SELECT ........ FROM .... WHERE EVENT_DT > FIRST_COMPLETE_DT ORDER BY EVENT_DT 

LOOP 

DBMS_OUTPUT.PUTLINE('First completed dt is:= '||FIRST_COMPLETE_DT||' QUERY RESULT DATE :='||R_ROW.EVENT_DT); 
..... 
END; 

1ST STORED PROC OUTPUT 

First completed dt is:= 14-FEB-14 

2ND STORED PROC OUTPUT 

First completed dt is:= 14-FEB-14 
First completed dt is:= 14-FEB-14 QUERY RESULT DATE := 28-FEB-12 

나는 그것주고 올바른 결과 SQL 쿼리를 실행

.

select ... from.... where event_dt > '18-FEB-14' order by event_dt; 

도와주세요.

감사 Sarma

+0

이런 일이 발생할 수있는 유일한 방법이 있다고 생각할 수는 있지만 확인이 필요합니다. EVENT_DT는 어떤 유형으로 선언 되었습니까? –

답변

0

그것이 있어야 무엇을 바라보고 코드에 비교하십시오 : 당신이 원하는대로

CREATE OR REPLACE PROCEDURE SP_FIRST_COMPLETE (
    TASK_ID    IN  VARCHAR2, 
    FIRST_COMPLETE_DT  IN OUT DATE) 
IS 
BEGIN 

    DBMS_OUTPUT.PUT_LINE ('First date is:= ' || 
    TO_DATE(FIRST_COMPLETE_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH') 
    ); 
END; 


CREATE OR REPLACE PROCEDURE SP_NOT_FIRST_COMPLETE (
    TASK_ID    IN  VARCHAR2, 
    FIRST_COMPLETE_DT IN  DATE, 
    FIRST_COMPLETE_DT1  OUT DATE) 
IS 
BEGIN 

    FIRST_COMPLETE_DT1 := TO_DATE(FIRST_COMPLETE_DT, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH'); 
    DBMS_OUTPUT.PUT_LINE ('Second date is:= ' || FIRST_COMPLETE_DT1); 

END; 

실행

DECLARE 
    THE_OUTPUT_DATE1 DATE ; 
    THE_OUTPUT_DATE2 DATE ; 
BEGIN 

    THE_OUTPUT_DATE1 := SYSDATE; 
    SP_FIRST_COMPLETE (1, THE_OUTPUT_DATE1); 
    SP_NOT_FIRST_COMPLETE (1, THE_OUTPUT_DATE1, THE_OUTPUT_DATE2); 

    DBMS_OUTPUT.PUT_LINE('Output date ' || TO_DATE(THE_OUTPUT_DATE2, 'DD-MM-YYYY', 'NLS_DATE_LANGUAGE=ENGLISH')); 
END; 

DBMS의 출력 :

First Date is:= 06-APR-14 
Second Date is:= 06-APR-14 
Output date: 06-APR-14 
관련 문제