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

Oracle SQL创建表遇ORA-00904无效标识符错误求助

问题排查与解决方案

错误根源

你的CREATE TABLE语句里的TRIGGER是Oracle的保留关键字(用于创建触发器的核心语法),Oracle会将其识别为SQL命令的一部分,而非普通列名,因此触发ORA-00904无效标识符错误。这和你之前猜测的大小写敏感性无关,本质是关键字冲突。

两种解决办法

方案1:用双引号包裹关键字列名

在Oracle中,用双引号包裹的标识符会被当作普通字符串处理,不会被解析为关键字。注意在Python字符串里可以用单引号包裹SQL语句,避免双引号转义问题:

ENGINE = create_engine('credentials', pool_pre_ping=True) 
connection = ENGINE.raw_connection()
cursor = connection.cursor()

cursor.execute('CREATE TABLE US (NAME VARCHAR2(255), ACTION_NAME VARCHAR2(255), CONNECTORNAME VARCHAR2(255), "TRIGGER" VARCHAR2(255), UPDATEDBY DATE, IDSET VARCHAR2(255), CONNECTORID VARCHAR2(255))')

⚠️ 注意:用双引号包裹后,后续查询该列时必须严格匹配大小写(比如必须写"TRIGGER",不能写成trigger或Trigger)。

方案2:修改列名(推荐)

直接把列名改成非关键字的名称,从根源避免冲突,后续使用也更方便:

ENGINE = create_engine('credentials', pool_pre_ping=True) 
connection = ENGINE.raw_connection()
cursor = connection.cursor()

cursor.execute("CREATE TABLE US (NAME VARCHAR2(255), ACTION_NAME VARCHAR2(255), CONNECTORNAME VARCHAR2(255), TRIGGER_NAME VARCHAR2(255), UPDATEDBY DATE, IDSET VARCHAR2(255), CONNECTORID VARCHAR2(255))")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:40:22