ORA-01795:从python和cx_oracle看,一个列表中的最大表达式数量是1000。

问题描述 投票:0回答:1

我把有50万条记录的empList作为查询的输入,但我的python cx_oracle代码出现了以下错误。我需要所有这50万条记录的结果。如何在不创建临时表的情况下得到这个结果?这将是很好的,如果我传递它作为一个列表或数据框架。

错误。

cx_Oracle.DatabaseError: ORA-01795: 列表中表达式的最大数量为1000个。

curs.execute("select ID,NAME,SAL from EMP where ID in "+str(tuple(empList))+"  ")

解决方法 ::我已经解决了这个问题,每次都会像下面这样分割并发送1000条记录。而且性能也不错。

repeat = 1
for i in range(0, len(myList), 1000):
    for j in range(i, 1000*repeat):
        if j+1 <= len(myList):
            tempList.append(myList[j])
    //Further processing logic
    tempList = []
    repeat += 1
sql oracle python-3.6 cx-oracle
1个回答
0
投票

Oracle允许> 1000 Tuples,但不允许简单的值。这里有更多的内容此处,

你可以利用Tuples

SELECT ID, NAME, SAL
FROM EMP
WHERE (1, ID) IN ((1, value1), (1, value2), (1, value3),.....(1, value5000));

当然,这是在你没有选择在IN里面使用子查询来从临时表中获取你需要的值的情况下。

SELECT ID, NAME, SAL FROM EMP where ID IN (SELECT values from <temporary-table>);
© www.soinside.com 2019 - 2024. All rights reserved.