Question

I am stuck at comparing two dates in plsql programming.

I have 2 stored procedures. The first stored procedure returns me date column as OUT param. I am passing 1st output param is as input param for 2nd stored procedure.

But my query not returning correct value.

Stored procedure #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;

Stored procedure #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

When I run query in SQL its giving correct result.

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

Please help in in this.

Thanks Sarma

Était-ce utile?

La solution

Please look to to what it should be and compare to your code:

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;

The execution

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;

the DBMS output then as what you want:

First Date is:= 06-APR-14
Second Date  is:= 06-APR-14
Output date: 06-APR-14
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top