【问题标题】:Catch-all value for a parameter in the WHERE clause of a Prepared Statement?准备语句的 WHERE 子句中的参数的全部值?
【发布时间】:2021-04-13 01:41:13
【问题描述】:

我有以下通过 JDBC 驱动程序发送到 Oracle 数据库的 Prepared Statement:

SELECT * FROM mytable WHERE ? = ANY(col1, col2)

现在,通常当我将其作为查询执行时,我会提供一个存在于 col1col2 中的值,Oracle 会尽职尽责地返回包含该值的所有行。

但是,我想通过提供通配符参数之类的东西,使用相同的准备好的语句来获取表中的 所有 行。我试过像 "*" 和 "" 这样的字符串,但它总是返回 no 行。

是否存在用于获取 所有 行的准备好的语句中的参数值?

【问题讨论】:

    标签: sql oracle jdbc prepared-statement oracle18c


    【解决方案1】:

    你可以试试:

    where nvl(?, col1) in (col1, col2)
    

    如果您想要所有值,请传入null

    【讨论】:

    • 谢谢我想要的。非常感谢。
    【解决方案2】:

    您经常会为此使用NULL。像这样的:

    WHERE ? IN (col1, col2) OR ? IS NULL
    

    【讨论】:

    • 有趣的想法,但是根据您的陈述,我看到了我总是必须为其提供 2 值的问题 - 只是为了完整列表的罕见额外情况。 (有关多个“?”的讨论,请参见例如this question。)
    • @halloleo 。 . .我建议你使用命名参数,所以它就像where :param in (col1, col2) or :param is null
    • JDBC驱动是否支持Prepared Statements中的命名参数?来自what I have read,不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-03
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多