Python连接Oracle数据库遇ORA-00933错误,求解决建议
解决Oracle SQL ORA-00933错误的方案
核心问题:SQL语句语法顺序错误
Oracle中ORDER BY子句必须放在FETCH FIRST ... ONLY之前,你的SQL把两者顺序写反了,导致语法解析失败。修正后的SQL语句如下:
SELECT a.* FROM my_user.{table} a ORDER BY a.ACCNT_ID FETCH FIRST 4333 ROWS ONLY
额外逻辑问题修正
你的代码中查询的是a.*(整行数据),但后续却尝试将row[0]当作行数打印,这逻辑不符。如果需要统计总行数,应改用COUNT(*)查询:
account_query = f''' SELECT COUNT(*) FROM my_user.{table} a ''' cursor.execute(account_query) row = cursor.fetchone() if row: row_count = row[0] print("Number of rows:", row_count) else: print("No rows found.")
如果确实需要获取前4333行数据,使用修正顺序后的SQL即可正常执行,后续可遍历结果:
account_query = f''' SELECT a.* FROM my_user.{table} a ORDER BY a.ACCNT_ID FETCH FIRST 4333 ROWS ONLY ''' cursor.execute(account_query) # 遍历获取到的行 for row in cursor: print(row) # 或一次性获取所有行并统计数量 rows = cursor.fetchall() print(f"共获取到{len(rows)}行数据")
其他排查要点
- 确认
my_user是存在的合法Schema/用户,且当前连接用户拥有该表的访问权限 - 确认
ACCNT_ID是myTable中的有效列名,拼写无错误
内容的提问来源于stack exchange,提问作者fsssaiyan
相关产品推荐
相关产品推荐

