I’m puzzled about the correct use of bind variables with dates in Oracle. This isn’t within the database or when using PL/SQL, but rather when interacting with Oracle across an OCI interface, where the date needs to be passed in as a string using the to_date function.
I would have thought the right approach to ensure the proper use of bind variables is to do the following:
to_date(:my_date, :my_date_format)
However, I’ve seen approaches where the date format isn’t done using binds, so I’m a little confused.
Can anyone confirm this or suggest the best approach?
Is the date format a constant? Or does it change at runtime?
Normally, you know what format the string is (at least expected) to be in so the date format would be a constant. If something is a constant, it is not necessary to make it a bind variable, it can just be hard-coded as part of the statement. In this case, it wouldn’t matter either way but there are cases where you’d rather the value be hard-coded in the SQL statement because you want to give the optimizer more information (think of a column with highly skewed data where you’re always looking for a particular hard-coded value).
On the other hand, if the date format changes at runtime because someone is passing both the string representation of the date and the format the string is in to your procedure, it would make sense for the date format to be a bind variable.