比如有一张用户表userinfo(id ,name ,sex ,....)表中大概有10万条左右的纪录,现在用户给了一张excle表中大概列出了2万左右的用户的“name”的清单(这里名字假设为A1,A2,A3 .... ,A20000),现在要根据这个清单找出这2万左右用户的信息,于是我先读取了excle组合成了下面的sql语句:
select * from userinfo where name in ('A1','A2',....,'A999') or name in('A1000','A1001',....,'A1999') or name in ('A2000','A2001',....,'A2999') ...... or name in ('A19000','A19001',....,'A19999') or name in ('A20000');
由于用的是oracle 10g查询语句中如果in()中不是子查询语句的话,是具体的值则不能超过1000个,所以我分成了21组in组成了上面的SQL语句,但是这种查询效率很低,并且当组和的个数大概超过16个以上也就是in的参数有16000个以上时,将上面的sql语句用plsql执行时会报错:“ORA-03113: 通信通道的文件结束”。这个错误我找了好多资料也没有解决,所以我打算从sql方面进行优化,不知道大家有没有遇到过这种问题。请大家帮忙看下能帮我把sql给优化一下,或者能告诉我怎么解决“ORA-03113: 通信通道的文件结束”这个问题也行,谢谢!
操作系统 : windows Server 2003 , 数据库版本 :Oralce Database 10g Enterprise 10.2.0.1.0
select * from userinfo where name in ('A1','A2',....,'A999') or name in('A1000','A1001',....,'A1999') or name in ('A2000','A2001',....,'A2999') ...... or name in ('A19000','A19001',....,'A19999') or name in ('A20000');
由于用的是oracle 10g查询语句中如果in()中不是子查询语句的话,是具体的值则不能超过1000个,所以我分成了21组in组成了上面的SQL语句,但是这种查询效率很低,并且当组和的个数大概超过16个以上也就是in的参数有16000个以上时,将上面的sql语句用plsql执行时会报错:“ORA-03113: 通信通道的文件结束”。这个错误我找了好多资料也没有解决,所以我打算从sql方面进行优化,不知道大家有没有遇到过这种问题。请大家帮忙看下能帮我把sql给优化一下,或者能告诉我怎么解决“ORA-03113: 通信通道的文件结束”这个问题也行,谢谢!
操作系统 : windows Server 2003 , 数据库版本 :Oralce Database 10g Enterprise 10.2.0.1.0
解决方案 »
- 求助安装oracle ebs出现的问题
- 数据库里存的值是20060115,查询语句应该怎么写,查出来是2006/01/15
- PL/SQL中如何实现等待execute immdiate执行完成后再执行下一条指令?
- 找原因解释
- rownum的问题
- 关于取数据的一个问题(不好意思,真的是没分给啦,帮个忙啦)
- 如何能够删除oracle中的整个的表.drop命令的格式该怎么写?(初学者)
- 使用SQL语句向Oracle.8.1.7的Blob字段插入较长16进制编码字符串的问题
- 初当版主,散分同庆,请大家以后多多关照哈!!!
- 关于linux平台centos,oracle proc 编译报错的问题
- app_folder.define_folder_block 的问题
- 请教,ORACLE数据库中float型字段如果是空,怎么在SQL语句中转化为0
SELECT * FROM USERINFO A WHERE EXITS(SELECT 1 FROM TEMPTB B WHERE A.NAME = B.NAME)
来查询。