You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python将Excel数据插入Oracle数据库时遇ORA-00926错误求助

解决ORA-00926: missing VALUES关键字错误

问题分析

你遇到的ORA-00926错误说明Oracle数据库接收到的INSERT语句存在语法问题,核心是SQL中缺少VALUES关键字,或者语句结构被意外破坏。结合你的代码场景,可能的诱因包括:SQL语句含隐藏字符、Excel行数据异常间接导致SQL执行出错,或是绑定变量传递时的隐性问题。

排查与解决步骤

  • 打印SQL语句确认完整性
    在执行cur.execute()前添加打印逻辑,查看实际发送给数据库的SQL是否完整:

    for row in worksheet.iter_rows(min_row=2, values_only=True):
        id, name, category = row
        sql = "INSERT INTO category (id, name, category) VALUES (:1, :2, :3)"
        # 打印SQL和参数,验证语句结构
        print(f"SQL语句: {sql}")
        print(f"参数: {(id, name, category)}")
        cur.execute(sql, (id, name, category))
    

    如果打印出的SQL缺少VALUES或格式混乱,说明语句存在隐藏字符,手动重新输入SQL语句即可解决。

  • 校验Excel行数据格式
    确保Excel从第二行开始的每一行都包含3个数据列,避免解包row时出现异常间接影响SQL执行:

    for idx, row in enumerate(worksheet.iter_rows(min_row=2, values_only=True), start=2):
        if len(row) != 3:
            print(f"第{idx}行列数异常,跳过该行: {row}")
            continue
        id, name, category = row
        sql = "INSERT INTO category (id, name, category) VALUES (:1, :2, :3)"
        cur.execute(sql, (id, name, category))
    
  • 尝试使用命名绑定变量
    替换位置绑定为命名绑定,规避位置参数可能带来的隐性问题:

    for row in worksheet.iter_rows(min_row=2, values_only=True):
        id, name, category = row
        sql = "INSERT INTO category (id, name, category) VALUES (:id, :name, :category)"
        cur.execute(sql, {"id": id, "name": name, "category": category})
    

内容的提问来源于stack exchange,提问作者JoeTheProgrammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 18:33:10