【问题标题】:How to enable multiple variables to be searched when having a Colon search box有冒号搜索框时如何启用多个变量进行搜索
【发布时间】:2019-11-19 00:31:49
【问题描述】:

无法使用 = :variable 进行多重搜索。

我有一个 Select 语句,我想在其中提取数据,以最有效的方式执行此操作我有很多地方可以从中收集数据,因此除非另有说明,否则我希望为 null。

SELECT * FROM table WHERE (

(:nameColmn is null or nameColmn = :nameColmn)
AND
(:nameColmn2 is null or nameColmn2 = :nameColmn2)
AND
(:nameColmn3 is null or nameColmn3 = :nameColmn3)

)ORDER BY variable desc

我实际上有 9 个,但它是一样的。

一个框提示我可以在其中填写我的数据,除非没有填写任何内容,它保持空白(null)

我需要能够添加超过 1 个变量,例如在做时

(nameColmn IN('xyz','xyy','xyx'))

但是这不会提示一个框。就像他们设置的那样。

【问题讨论】:

    标签: sql oracle plsql oracle11g oracle12c


    【解决方案1】:

    如果要使用具有多个值的 Bind 变量,可以将其作为 CSV 字符串传递并拆分为行。

    SELECT * FROM yourtable
    WHERE namecolmn IN ( SELECT regexp_substr(:vals,'[^,]+',1,level)
                         FROM dual CONNECT BY
                              regexp_substr(:vals,'[^,]+',1,level) IS NOT NULL
                       )
    

    请注意,此 (:vals) 的参数应为 xyz,xyy,xyx,即两者之间不能有引号。

    另一种选择是使用替换变量 (&vals),它还会提示您输入,您可以传递 'xyz','xyy','xyx' 以获得所需的结果。

    SET VERIFY OFF --diables substitution output.
    SELECT * FROM yourtable
    WHERE namecolmn IN (&vals);
    

    【讨论】:

    • 我确信它会以某种方式工作,但不幸的是我无法让它以我想要的方式工作多个“(:vals)”但是如果没有添加任何信息,那么将其留空应该无关紧要。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    • 2020-02-29
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多