发现一个怪怪的问题,不知道怎么回事.(关于in的)

lzl8146 2006-07-17 02:40:38
以前只是听说用in子句时,如果in (.....)中比较多的话会速度很慢,昨天在PL/SQL中执行一个包含in的字句,此时in(.....)中的条件超过一千个,结果PL/SQL报关于in的错误(具体错误信息偶现在也不记得)。是不是说in(.....)的条件也有个数限制啊?碰到这样的问题怎么解决啊?反正我最后全部用or来连接这1千多个条件就可以查出数据了
...全文
198 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoxiao1984 2006-07-17
  • 打赏
  • 举报
回复
ex:
create or replace type myTableType as table of number;

create or replace function in_list( p_string in varchar2 )
return myTableType
as
l_data myTableType := myTableType();
l_string long default p_string || ',';
l_n number;
begin
loop
exit when l_string is null;
l_data.extend;
l_n := instr( l_string, ',' );
l_data( l_data.count ) := substr( l_string, 1, l_n-1 );
l_string := substr( l_string, l_n+1 );
end loop;
return l_data;
end;

SQL> select * from THE ( select cast( in_list('1,2,3,5,12') as mytableType ) f
rom dual ) a;

COLUMN_VALUE
------------
1
2
3
5
12
就可以避免1000的限制



龙翔飞雪 2006-07-17
  • 打赏
  • 举报
回复
到999个in 条件后,
写一个or 试试
LinZhongBao 2006-07-17
  • 打赏
  • 举报
回复
因为oracle9i中的in字句最多只能有1000个条件值
将ID IN ()改写为两个或者多个ID IN () OR ID IN () 保证每个in列表的数量不超过1000
就可以了,
我刚才也试验了下(可不知在10g里是不是也这样?)
LinZhongBao 2006-07-17
  • 打赏
  • 举报
回复
哦,是这样的啊,
哈哈!
明白了!!!!
多谢 xiaoxiao1984(笨猫一只^_^)
lzl8146 2006-07-17
  • 打赏
  • 举报
回复
为什么存在这样的差异?真让人弄不明白啊...呵呵,能讲讲临时表是如何解决的吗?是不是把条件放到临时表,然后利用where x in (select x1 from 临时表 ...) 来实现的?
xiaoxiao1984 2006-07-17
  • 打赏
  • 举报
回复
如果是 where x in (select x1 from ...) 这样格式的没有问题
LinZhongBao 2006-07-17
  • 打赏
  • 举报
回复
那就怪了,
我的50万条记录
都能执行的,
可为什么我的就不发生这种情况呢?
xiaoxiao1984 2006-07-17
  • 打赏
  • 举报
回复
呵呵, where x in (,[,...]) 这样格式的in-list 确实有1000以内的限制
可以通过array bind或者temporary table解决
lzl8146 2006-07-17
  • 打赏
  • 举报
回复
刚才把那个错误又再现了一遍

select * from IS_OBJ_FROM_FLOW_INSTANCE where OBJ_TYPE=4 and DATA_ID in (1,7,8,9,10,227,453,454,455,486,504,505,525,1230,1231,1234,1239,1240,1251,1273,1274,1282,1285,6050,6052,6051,6053,6055,6058,6060,6059,6062,6063,6064,6068,6069,6070,6073,6065,6084,6085,6086,6088,6090...................)

条件有2419个

执行这个sql语句PL/SQL报的错误是:
ora-01795:maximum number of expressions in a list is 1000
LinZhongBao 2006-07-17
  • 打赏
  • 举报
回复
个数限制是没有限制的,
只不过更查询时间有关,
我想你的错误,应该不是个数原因!!!
swimming8243 2006-07-17
  • 打赏
  • 举报
回复
in里面的数量好像有限制,1000?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧