我试图从oracle数据库中选择170k记录,有一些如何避免这个错误?或以任何方式改进此查询?
感谢。
select sr.RELATED_PON, srsi.VALID_VALUE from SERV_REQ sr inner join SERV_REQ_SI_VALUE srsi on sr.DOCUMENT_NUMBER = srsi.DOCUMENT_NUMBER inner join SERV_ITEM si on si.SERV_ITEM_ID = srsi.SERV_ITEM_ID and si.STATUS = '6' where srsi.VALUE_LABEL = 'unitAddress' and srsi.VALID_VALUE in ('1682511819', '1682575135', '1682580326' ... more than 150k here! )
答案 0 :(得分:0)
Lamak是正确的:这看起来像一个属于表格的列表。
但是,如果由于某种原因这不方便,则必须将IN子句分解为每个不超过1000个元素的块。令人高兴的是,这非常简单:每1000个项目插入) OR ( scri.VALID_VALUE in
。
不幸的是,您很快就会遇到查询字符串的最大大小。 (对于Oracle,我认为这是32K)......但是要认真考虑一个临时表或其他东西。