问题描述
我有以下准备好的语句,我通过 JDBC 驱动程序将其发送到 Oracle 数据库:
SELECT * FROM mytable WHERE ? = ANY(col1,col2)
现在,通常当我将它作为查询执行时,我会提供一个存在于 col1
或 col2
中的值,Oracle 会尽职尽责地返回包含该值的所有行。
但是,我想使用相同的准备好的语句通过提供通配符参数之类的东西来获取表中的所有行。我试过像 "*" 和 "" 这样的字符串,但它总是返回没有行。
这个准备好的语句中的参数值是否存在,我可以用它获取所有行?
解决方法
你可以试试:
where nvl(?,col1) in (col1,col2)
如果需要所有值,则传入 null
。
出于此目的,您通常会使用 NULL
。像这样:
WHERE ? IN (col1,col2) OR ? IS NULL