Oracle 8 here.
When passing a date to a procedure, I can pass a ” and nothing is thrown.
Testing for MYDATE := '' doesn’t eval to true. Nor does LENGTH < 1. DBMS_OUTPUT shows nothing coming through the parameter.
Trying to pass '01-30-2009' (instead of 30-JAN-2009) throws an invalid date error.
How is passing a zero length string valid?
How do I test for a valid date?
In later versions of Oracle the empty string is considered the same as NULL. That is probably what you are running into.
You may be able to set the parameter to not null and then it ought to error out.
(As Jeffery Kemp noted in the comments, you can NOT use not null for a parameter)
As far as the invalid date error Oracle will implicitly cast a string to a date if it is in the format dd-mmm-yyyy. Otherwise you will have to run it through to_date with the proper mask.
I am not familiar with Oracle 8 so I’m not sure what is new or not. Hopefully this helps.