用ibatis, 主要代码如下: select t.name from user t where t.id in <iterate conjunction="," open="(" close=")"> #list[]# </iterate> list是Integer型数组
1. 拆分in 为 in or in的方式 2. 数组变成临时表。
报错为:ORA-01795: maximum number of expressions in a list is 1000 是说list中的个数大于1000,oracle 10g的限制用in的话不能超过1000个,现在list中是超过1000个的,该怎么写
select * from table_name where id in (id1,id2,id3...); in后括号中的参数个数有限制,Oracle 9i 中个数不能超过256,Oracle 10g个数不能超过1000.如果不可必要必须使用in,可以采用临时表,也可以对参数进行处理成多个in, 其中每个in列表中参数都小于1000,如 id in(id1,id2...) or id in(id501,id502...).
select * from table_name where id in (id1,id2,id3...); in后括号中的参数个数有限制,Oracle 9i 中个数不能超过256,Oracle 10g个数不能超过1000.如果不可必要必须使用in,可以采用临时表,也可以对参数进行处理成多个in, 其中每个in列表中参数都小于1000,如 id in(id1,id2...) or id in(id501,id502...).
PL/SQL又没有对数据元素做上限限制啊。
感觉你代码写得不合理造成的,用LOOP遍历数组么,看看你现在的代码,有没有优化和更好的实现方式?
主要代码如下:
select t.name
from
user t
where
t.id in
<iterate conjunction="," open="(" close=")">
#list[]#
</iterate>
list是Integer型数组
2. 数组变成临时表。
是说list中的个数大于1000,oracle 10g的限制用in的话不能超过1000个,现在list中是超过1000个的,该怎么写
in后括号中的参数个数有限制,Oracle 9i 中个数不能超过256,Oracle 10g个数不能超过1000.如果不可必要必须使用in,可以采用临时表,也可以对参数进行处理成多个in,
其中每个in列表中参数都小于1000,如 id in(id1,id2...) or id in(id501,id502...).
in后括号中的参数个数有限制,Oracle 9i 中个数不能超过256,Oracle 10g个数不能超过1000.如果不可必要必须使用in,可以采用临时表,也可以对参数进行处理成多个in,
其中每个in列表中参数都小于1000,如 id in(id1,id2...) or id in(id501,id502...).