ORA-00939:函数参数太多,我在pycharm中使用cx_oracle从数据库中提取,并遇到以下错误:

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

变量hour的长度是792,uitid是15,所以都低于1000,所以我不知道为什么会收到这个错误,我尝试了两种方法,如下所示:

第一种方式:

query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM  int_Stg.UnitScheduleOfferHourly
WHERE Hour in (to_date({hour_binds}), 'dd-mon-yyyy hh24')
AND   UnitScheduleId in ({id_binds})""".format(
  hour_binds=",".join((f":{idx}" for idx, _ in enumerate(hour, 1))),
  id_binds=",".join((f":{idx}" for idx, _ in enumerate(unitid, len(hour) + 1))),
)

res = connection.cursor().execute(query, (*hour, *unitid)).fetchall()
print(res)

第二

def generate_sql_in_binds(
    name: str,
    size: int,
    start: int = 1,
    max_binds: int = 1000,
) -> str:
    in_clauses = (
        "{name} IN ({binds})".format(
            name=name,
            binds=",".join(
                (
                    f":{b+start}"
                    for b in range(i, min(i+max_binds,size))
                )
            )
        )
        for i in range(0, size, max_binds)
    )
    return "(" + (" OR ".join(in_clauses)) + ")"

query = """SELECT HOUR, UNITSCHEDULEID, VERSIONID, MINRUNTIME
FROM  int_Stg.UnitScheduleOfferHourly
WHERE Hour in (to_date({hour_binds}), 'dd-mon-yyyy hh24')
AND   UnitScheduleId in ({id_binds})""".format(
  hour_binds=",".join((f":{idx}" for idx, _ in enumerate(hour, 1))),
  id_binds=",".join((f":{idx}" for idx, _ in enumerate(unitid, len(hour) + 1))),
)
res = connection.cursor().execute(query, (*hour, *unitid)).fetchall()
print(res)

错误是

python oracle database-connection cx-oracle database-cursor
1个回答
0
投票

这看起来很可疑:

WHERE Hour in (to_date({hour_binds}), 'dd-mon-yyyy hh24')

格式掩码应该是

to_date
函数的一部分,即

WHERE Hour in (to_date({hour_binds}, 'dd-mon-yyyy hh24'))
© www.soinside.com 2019 - 2024. All rights reserved.