我使用JDBC通过'IN'语句检索Oracle数据库。但是有太多的表达式,大约> 1000。 它看起来像:
SELECT * FROM MyTable WHERE name IN (?, ?, ?......); --More than 1000 question signal
导致'语法错误或访问规则违规',这意味着'列表中的最大表达式数为1000 '。
我是否必须多次执行检索操作(例如,使用100'?'并检索10次)并合并列表? 更好的解决方案?谢谢!
编辑: 我没有机会修改数据库,这不是我的艺术作品。
答案 0 :(得分:6)
我会重新思考为什么你需要传递那么多要寻找的东西的逻辑。也许有一种不同的方式来指定你要找的东西。
或者,另一个选项是创建一个临时表,将要查找的键加载到表中,然后在数据表和键表之间进行连接。那么你不需要in()子句。
答案 1 :(得分:1)
如果您有那么多表达式,可能更容易将它们插入临时表,然后针对临时查询MyTable。
答案 2 :(得分:1)
围绕这个的蛮力方式是
(foo in (1,4,8,12,1000)) or (foo in (2333,2443,2453,4665))
其中每个in子句小于1000
当然,查询性能的可能性不是很好。
答案 3 :(得分:0)
Oracle存在IN列表> ~1000的问题。
就个人而言,我更喜欢加入这种类型的东西。