2

我对在 Oracle中正确使用带日期的绑定变量感到困惑。这不是在数据库中或在使用 PL/SQL 时,而是在通过 OCI 接口与 Oracle 交互时,需要使用to_date函数将日期作为字符串传递。

我会认为确保正确使用绑定变量的正确方法是执行以下操作:

to_date(:my_date, :my_date_format)

但是,我已经看到不使用绑定完成日期格式的方法,所以我有点困惑。

谁能证实这一点或建议最好的方法?

4

2 回答 2

1

日期格式是常数吗?还是在运行时改变?

通常,您知道字符串的格式(至少是预期的),因此日期格式将是一个常量。如果某物是常量,则无需将其设为绑定变量,只需将其硬编码为语句的一部分即可。在这种情况下,无论哪种方式都没有关系,但在某些情况下,您希望在 SQL 语句中硬编码该值,因为您想为优化器提供更多信息(想想一个具有高度倾斜数据的列,您'总是在寻找一个特定的硬编码值)。

另一方面,如果日期格式在运行时发生更改,因为有人将日期的字符串表示形式和字符串的格式都传递给您的过程,那么将日期格式作为绑定变量是有意义的。

于 2012-01-26T15:27:52.483 回答
1

你的问题的答案是取决于...

如果您正在动态创建 date_format,那么您应该使用绑定变量来使自己的 SQL 注入安全。如果您没有动态创建日期格式,那么它已经是硬编码的,而且意义不大。

select to_date(:my_date,'yyyymmdd') from dual

无论如何都是安全的,但是:

select to_date(:my_date,:my_date_format) from dual

真的应该是一个绑定。

这一切都假设 :my_date 不是列,在这种情况下,它根本不能是绑定变量。

如果您:my_date在将静态日期传递给 Oracle 并且不使用列的情况下具有约束力,那么 OCI 无法在不使用 Oracle 的情况下为您解决此问题(我不确定,从未使用过)。

于 2012-01-26T15:29:35.627 回答