Oracle建表触发ORA-00907缺失右括号错误求助
ORA-00907建表报错根因及修复方案
错误根因
- 核心为Oracle版本兼容性问题:
NOKEEP、NOSCALE是Oracle 12.2版本才新增的IDENTITY自增列可选属性,如果你执行建表语句的数据库版本为12.1及更早版本,数据库解析SQL时无法识别这两个关键字,会误报missing right parenthesis错误,和括号是否匹配无关。 - 导出脚本适配问题:SQL Developer导出表结构时会默认匹配当前连接数据库的全部语法,不会主动做低版本兼容,若导出时连接的是12.2及以上版本的库,就会自动带出这两个参数,拿到低版本环境执行就会触发报错。
- 补充说明:Oracle提示的错误起始位置为第8行是语法解析失败时的偏移行,不代表实际错误出现在第8行,属于语法误报的伴随问题。
修复方案
- 方案1:直接删除IDENTITY定义中的
NOKEEP和NOSCALE参数即可,两个参数为非必填配置,删除后不影响自增列核心功能,12.1及以上版本均可正常执行。修改后的自增列定义示例:
"ENVIROMENT_RISK_ID" NUMBER GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 NOCACHE NOORDER NOCYCLE,
- 方案2:若需要完全保留导出时的表属性,将执行建表语句的数据库版本升级到12.2及以上即可。
内容的提问来源于stack exchange,提问作者Rodolfo Vazquez
相关产品推荐
相关产品推荐

