CREATE OR REPLACE FUNCTION INTERSECAO(VDATA1 IN DATE, -- Início do período que se deseja validar
VDATA2 IN DATE, -- Término do período que se deseja validar
VDATA3 IN DATE, -- Início do intervalo
VDATA4 IN DATE, -- Término do intervalo
PDATAHORA IN VARCHAR2 DEFAULT 'N'
) RETURN VARCHAR2 IS
VDATAAUX DATE;
VDATAaux2 DATE;
VDATAFIM DATE;
BEGIN
IF VDATA2 IS NULL
THEN if PDATAHORA = 'N'
then VDATAaux2:= TO_DATE('31/12/2999', 'DD/MM/YYYY');
else VDATAaux2:= TO_DATE('31/12/2999 23:59','DD/MM/YYYY HH24:MI');
end if;
else VDATAaux2:= VDATA2;
END IF;
IF VDATA4 IS NULL
THEN if PDATAHORA = 'N'
then VDATAFIM := TO_DATE('31/12/2999', 'DD/MM/YYYY');
else VDATAFIM := TO_DATE('31/12/2999 23:59','DD/MM/YYYY HH24:MI');
end if;
ELSE VDATAFIM := VDATA4;
END IF;
if (vdata3 <= vdataaux2
and (vdata4 >= vdata1
or vdata4 >= vdata1
and vdata4 <= vdataaux2
or vdata4 is null)) or
(vdata3 > vdata1 and vdata4 is null and vdata2 is null)
then RETURN 'TRUE';
else RETURN 'FALSE';
end if;
END;