我想向Prepared语句添加可选的“ todate”参数
一种方法是为可选参数添加一个占位符,并在执行前替换它
where id=? OPTIONAL_SECTION
例如,OPTIONAL_SECTION将设置为TO_DATE <= sysdate -1
一种更好和正确的方法是将可选参数与处理null绑定
where id=? and TO_DATE <= nvl(?, TO_DATE)
是否有更好的方法来处理可选的date参数?特别是因为条件可以不等于(TO_DATE
一种更好和正确的方法是将可选参数与处理null绑定
这不一定更好或更正确。这是另一种方式,但是如果它“更好(更)正确”,则值得商de。
[SQL查询优化器通常在知道任何?
参数值之前运行,因此TO_DATE <= nvl(?, TO_DATE)
无法优化,并且需要全表扫描,除非where
子句中有任何其他条件。
然而,对于TO_DATE <= ?
,优化器可能可以使用TO_DATE
上的索引对索引进行远程扫描,因此我认为根据可用索引,第一种选择可能会更好。] >
条件可以不等于(TO_DATE
编写第二个版本的正确方法是:
where id = ? and (? is null or TO_DATE < ?)
您当然必须为
PreparedStatement
指定两次值。
具有可选参数