Oracle中修改表列添加外键时报ORA-00905缺失关键字错误
错误原因
触发ORA-00905缺失关键字错误的核心原因是SQL语法不符合Oracle规范,具体问题有两处:
- Oracle中修改表字段属性的子句关键字是
MODIFY,不是你写的ALTER COLUMN(该写法是MySQL、SQL Server等其他数据库的语法) - Oracle不支持在修改字段属性的同一段子句里直接追加外键约束定义,修改字段、添加外键是两个独立的操作,不能揉在同一段字段修改逻辑里。
另外要提前确认三个外键创建的前置规则,不满足就算语法改对也会执行失败:
- 被引用的
programmer表的pname字段必须已经设置为主键,或者配置了唯一约束 programs表的pname字段数据类型、长度必须和programmer.pname完全一致programs表现有pname字段的所有值,都必须能在programmer.pname中找到对应匹配记录,不存在孤立值
修正方案
两个操作分开执行即可:
- 如果需要先调整
pname字段的类型长度,先执行字段修改语句:
alter table programs modify pname varchar2(20);
如果当前programs.pname的类型长度已经和programmer.pname完全一致,可以跳过这一步。
- 执行外键约束添加语句,建议给外键指定明确的约束名,方便后续维护:
alter table programs add constraint fk_programs_pname foreign key (pname) references programmer(pname);
执行完上述语句即可成功创建外键关联。
内容的提问来源于stack exchange,提问作者Abhishek Kumar
相关产品推荐
相关产品推荐

