Oracle建表报错ORA-00907:缺失右括号,求SQL问题排查
Oracle建表报错ORA-00907: 缺失右括号问题分析
原报错SQL语句
CREATE TABLE "EDS"."ESBPROCDOC" ( "ID" NUMBER(10,0) PRIMARY key Sequence COMMENT'自增主键', "PROCNAME" VARCHAR(36) not NULL COMMENT'处理器名称', "PROCCODE" NUMBER(10,0) unique COMMENT'处理器对应数字', "PROCDESC" CLOB COMMENT'处理器描述', "PROCVAL" CLOB COMMENT'处理器值解释', "EXTDPARAM" CLOB COMMENT'扩展参数解释', "IS_DELETED" NUMBER(10,0) DEFAULT 0 COMMENT'逻辑删除', "CREATED_AT" TIMESTAMP DEFAULT SYSTIMESTAMP COMMENT'创建表时间', "UPDATED_AT" TIMESTAMP DEFAULT SYSTIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改表时间' USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DHERP" ENABLE ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "DHERP"
问题与报错原因
- 主键定义语法错误:Oracle中不能直接在
PRIMARY key后加Sequence实现自增。自增主键需单独创建序列,或在12c及以上版本使用IDENTITY列语法,该错误导致解析器无法识别字段定义的结束位置。 - 误用MySQL语法:
ON UPDATE CURRENT_TIMESTAMP是MySQL专属语法,Oracle不支持字段级自动更新时间,需通过触发器实现,该语法破坏了SQL结构逻辑。 - 索引配置位置错误:
USING INDEX...子句应紧跟在主键约束定义之后,原SQL将其放在最后一列后,导致表结构定义的括号匹配逻辑混乱,最终触发ORA-00907报错(这类报错通常并非真的缺失右括号,而是前置语法错误引发解析异常)。
内容的提问来源于stack exchange,提问作者xueez
相关产品推荐
相关产品推荐

