Oracle Java-向预准备语句中添加可选的date参数

问题描述 投票:0回答:2

我想向Prepared语句添加可选的“ todate”参数

一种方法是为可选参数添加一个占位符,并在执行前替换它

  where id=? OPTIONAL_SECTION 

例如,OPTIONAL_SECTION将设置为TO_DATE <= sysdate -1

一种更好和正确的方法是将可选参数与处理null绑定

where id=? and TO_DATE <= nvl(?, TO_DATE)

是否有更好的方法来处理可选的date参数?特别是因为条件可以不等于(TO_DATE

  • 这是一个最小的示例,Id不是主键(实际上是外键),SQL返回多个记录。
java oracle date prepared-statement optional-parameters
2个回答
1
投票

一种更好和正确的方法是将可选参数与处理null绑定

这不一定更好或更正确。这是另一种方式,但是如果它“更好(更)正确”,则值得商de。

[SQL查询优化器通常在知道任何?参数值之前运行,因此TO_DATE <= nvl(?, TO_DATE)无法优化,并且需要全表扫描,除非where子句中有任何其他条件。

然而,对于TO_DATE <= ?,优化器可能可以使用TO_DATE上的索引对索引进行远程扫描,因此我认为根据可用索引,第一种选择可能会更好。] >


条件可以不等于(TO_DATE

编写第二个版本的正确方法是:

where id = ?
  and (? is null or TO_DATE < ?)

您当然必须为PreparedStatement指定两次值。


0
投票

具有可选参数

© www.soinside.com 2019 - 2024. All rights reserved.