ora-01795:一个列表中的表达式的最大数目是1000个,来自python和cx\u oracle

hjzp0vay  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(509)

我正在传递emplist,它有500k条记录作为查询的输入,但是我的python cx\u oracle代码失败,出现以下错误。我需要所有500k记录的结果。如何在不创建临时表的情况下获取此信息?如果我把它作为一个列表或Dataframe传递就好了。
错误:
cx\u 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
cxfofazt

cxfofazt1#

oracle允许大于1000个元组,但不允许简单值。更多关于这里和这里,
你可以利用元组

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

当然,如果您不能选择在中使用子查询从temp表中获取所需的值,那么就需要这样做。

SELECT ID, NAME, SAL FROM EMP where ID IN (SELECT values from <temporary-table>);

相关问题