Optional parameter in where condition

Posted on

Question :

I have the following where condition:

lr."dateEnd" >= to_date(?, 'dd.mm.yyyy') and lr."dateEnd" <= to_date(?, 'dd.mm.yyyy')

All works fine. But the second unnamed parameter is optional. How to check if it’s empty or null then don’t check the second condition?

Answer :

Use CASE?

http://docs.oracle.com/cd/B19306_01/server.102/b14200/expressions004.htm

something like:

lr."dateEnd" >= to_date(?, 'dd.mm.yyyy') and lr."dateEnd" <= (case when parameter2 is null then
sysdate
  else
to_date(parameter2, 'dd.mm.yyyy')

I think you should use dynamic SQL, snippet below:

command varchar2(500);
command := 'YOUR SQL';
command := command || ' lr."dateEnd" >= to_date(:1, ''dd.mm.yyyy'')';

if (secondParameter is not null) then
 command := command ||' '|| 'and lr."dateEnd" <= to_date(:2, ''dd.mm.yyyy'')' 
 execute immediate command using firstParameter, secondParameter;

else  
 execute immediate command using firstParameter;

end if;

Leave a Reply

Your email address will not be published. Required fields are marked *