Oracle下sql语句 IN(1,2,3,4,5,6.。。。)的上限是 1000个参数分析

发布时间 2024-01-09 22:29:59作者: 一样的梦

  项目经理反馈了一个老系统,以前默认只让选择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
        )

      优点:只需要写一个通用方法;

 结论,最后使用了第三种;