oracle查询时使用in出现列表中的最大表达式数为1000

linzhidong01 2012-12-11 11:45:13
最近小弟遇到这么个问题,希望大牛们帮帮忙,谢谢各位了,问题如下:
我通过webservice从另一家公司得到一些数据然后插入到我们自己的数据库中,为了保持外键关系,需要先根据这家公司得到的数据中的身份证号码到我们公司的中的人员信息表中查询到相应的人员序号,然后连同这些数据一起插入到我们的数据库表中。

使用身份证号查询人员序号,我想到的办法就是用in来查询了,所以呢我先把得来的身份证号拼接成字符串,然后用in来查询,结果就出现错误:列表中的最大表达式数为1000

我上网查了下有的说把身份证号拼接成的字符串分解下,用

select ryxh from ryxx where sfzhm in ('身份证1',....'身份证999') or in ('身份证1000',.....,'身份证1999') or in() ....

来查询,这确实是个解决办法,但效率不怎么样啊,我们那个人员信息表中有180多万条数据,我试了下,查起来很慢啊。。。。

所以求教各位了,有没有更好的方法?或者干脆不用in这种方法查询,换别的方法查询,exists这种方法应该是不适用这里了。小弟在这里先谢谢各位了
...全文
1196 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
linwaterbin 2012-12-11
  • 打赏
  • 举报
回复
1.临时表,把in 列表写到临时表里 2.cursor逐个处理 3.两个表关联一下(UNION ALL) 4.设置cursor=force 5.in里使用绑定变量
izj 2012-12-11
  • 打赏
  • 举报
回复
sfzhm 按照1-999 这样的长度分区。。。 然后每次查的时候从分区里查询结果,最后把结果unoin all
SSH198 2012-12-11
  • 打赏
  • 举报
回复
可以使用差集。

17,140

社区成员

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

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