使用Parameter时,Oracle In Clause无法正常工作

时间:2015-06-02 12:53:08

标签: oracle oracle11g

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

解决方案

重写in子句,就像这样

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

当我这样做时,这将有效

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

并只传递一个值。但是当我传递多个值时它会失败并给我ORA-01722:无效的数字错误

我尝试了多个相同条款的组合,但没有任何工作

感谢任何帮助...

1 个答案:

答案 0 :(得分:1)

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

将多个值作为IN查询的单个值传递(几乎)永远不是一个好主意 - 要么必须使用字符串连接(容易出现SQL注入和可怕的性能),要么必须要有固定数量的参数IN(通常不是你想要的)。

我建议你

  • INSERT将您的搜索项目放入临时表
  • JOIN
  • 中使用SELECT此搜索表