Oracle下sql语句 IN(1,2,3,4,5,6.。。。)的上限是 1000个参数分析
项目经理反馈了一个老系统,以前默认只让选择500个查询条件,现在甲方要求放开限制;放开限制后,因为以前开发人员写的sql语句,是 in(1,2,3,4,5.....),带来的隐患就是,如果用户选择了1000个条件就会触发oracle最大个数限制;数据库咱也不太懂,请教数据库组成员,数据库组成员给提供了几个方案;
(1)创建临时表:每次查询的时候,选把数据插入到一个临时表中,然后再进行查询;这种方案行得通;
优点:通过从临时表中获取数据,查询效率会比较快,并能解决1000个限制;
缺点:每次查询都必须往临时表插入数据、删除数据,用户频繁操作会增加查询时间;改动工作量也会比较大;
(2)创建函数,通过函数对(1,2,3,4,5,6,7,8,9)进行拆分,拆分成 in(1,2,3,4,5,) or in(6,7,8,9)这种格式,然后返回 结果,
例如: select f_hs('(1,2,3,4,5,6,7,8,9)','dm') from dual 返回结果:( dm in (1,2,3,4,5,) or dm in(6,7,8,9))
优点:只需要写一个函数,同时不需要对代码进行大量修改;
缺点:函数字符串最大长度为2.3万个字符;
(3)通过编写代码把 (1,2,3,4,5,6,7,8,9)字符串,修改成虚拟表形式,如下;
(
select '1' as sbdw from dual union all
select '2' as sbdw from dual union all
select '3' as sbdw from dual union all
select '4‘ as sbdw from dual union all
)
优点:只需要写一个通用方法;
结论,最后使用了第三种;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY