Nickon
Nickon

Reputation: 10156

Overlap function in Oracle

I'm writing a package to learn Oracle. I want to create an OVERLAP function that checks if two date ranges overlap each other.

  FUNCTION OVERLAP(p_START_DATE_1 DATE, p_END_DATE_1 DATE,
   p_START_DATE_2 DATE, p_END_DATE_2 DATE) RETURN VARCHAR2 AS

   lv_RESULT VARCHAR2(1);
  BEGIN 

   lv_RESULT := SELECT 'T' AS overlap FROM dual
       WHERE (p_START_DATE_1, p_END_DATE_1) overlaps (p_START_DATE_2, p_END_DATE_2);

   IF (lv_RESULT = 'T')
     RETURN 'T';

   RETURN 'N';

  END OVERLAP;

I tried to execute my function, but getting an error ORA-04063: package body 'XYZ' contains errors...

SELECT KP_XYZ_PACKAGE_SQL.OVERLAP(
       TO_DATE('01/01/2014', 'DD/MM/YYYY'),
       TO_DATE('01/12/2014', 'DD/MM/YYYY'),
       TO_DATE('01/02/2014', 'DD/MM/YYYY'),
       TO_DATE('01/05/2014', 'DD/MM/YYYY'))
FROM DUAL;

I think SELECT works fine. But the error occurs (I suppose) here: lv_RESULT := SELECT.... Why?

Upvotes: 0

Views: 11041

Answers (2)

franck Beaudichon
franck Beaudichon

Reputation: 1

Corrected version : return 'T' for True 'N' for False (?)

CREATE OR REPLACE FUNCTION OVERLAP(p_START_DATE_1 DATE, p_END_DATE_1 DATE,
    p_START_DATE_2 DATE, p_END_DATE_2 DATE) RETURN VARCHAR2 AS

  lv_RESULT VARCHAR2(1);

 BEGIN 
    SELECT 'T' into lv_RESULT FROM dual WHERE (p_START_DATE_1, p_END_DATE_1) overlaps (p_START_DATE_2, p_END_DATE_2);
 RETURN lv_RESULT;

  EXCEPTION
      WHEN NO_DATA_FOUND THEN lv_RESULT := 'N'; 
  RETURN lv_RESULT;

END OVERLAP;
/

Upvotes: 0

Joseph B
Joseph B

Reputation: 5669

Try this:

CREATE OR REPLACE FUNCTION OVERLAP(p_START_DATE_1 DATE, p_END_DATE_1 DATE,
   p_START_DATE_2 DATE, p_END_DATE_2 DATE) RETURN VARCHAR2 AS

   lv_RESULT VARCHAR2(1);
  BEGIN 
       lv_RESULT := 'N';      

       SELECT 'T' into lv_RESULT FROM dual
           WHERE (p_START_DATE_1, p_END_DATE_1) overlaps (p_START_DATE_2, p_END_DATE_2);

   IF (lv_RESULT = 'T') THEN
     RETURN 'T';
   END IF;

   RETURN 'N';

  END OVERLAP;

The IF statement was incomplete too - THEN and END IF were missing, which I have now added.

The documentation for SELECT INTO statement is here. There are links to examples at the end of the page.

Upvotes: 2

Related Questions