【问题标题】:Oracle In Clause not working when using Parameter使用参数时 Oracle In 子句不起作用
【发布时间】:2015-06-02 12:53:08
【问题描述】:

我有一个讨厌的 SSRS 报告问题在我的报告的主查询中有一个条件可以有 1000 多个选项,当用户选择所有选项时它会失败,因为我的后端数据库是 Oracle。我做了一些研究并找到了一个可行的解决方案。

解决办法是

像这样重写 in 子句

(1,ColumnName) in ((1,Searchitem1),(1,SearchItem2))  

但是当我这样做时,这将起作用

(1,ColumnName) in ((1,:assignedValue))

并只传递一个有效的值。但是当我传递多个值时,它会失败并给我 ORA-01722: Invalid number error

我尝试过多次组合相同的 in 子句,但没有任何效果

感谢任何帮助...

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    大胆猜测:您的:assignedValue 是一个以逗号分隔的数字列表,Oracle 尝试将其解析为单个数字。

    将多个值作为单个值传递给IN 查询(几乎)从来都不是一个好主意——要么您必须使用字符串连接(容易出现 SQL 注入和糟糕的性能),要么您必须有一个固定的数字IN 的参数(通常不是你想要的)。

    我建议你

    • INSERT你的搜索项放到一个临时表中
    • 在您的SELECT 中使用带有此搜索表的JOIN

    【讨论】:

    • 我无法创建临时表,因为它将从 SSRS 报告运行,并且多个用户可以同时访问此报告。我以前也想过这个选项。
    • 临时表特定于给定的数据库会话。除非您的 SSRS 报告使用连接池,否则它应该可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2013-01-26
    • 1970-01-01
    相关资源
    最近更新 更多