本文介绍 OceanBase 数据库 Oracle 模式下添加外键时报 ORA-00600 错误的处理方法。
问题现象
为 cust 表创建外键约束时,显示关联字段错误。
obclient [SYS]> ALTER TABLE cust ADD CONSTRAINT C_FK FOREIGN KEY (c_w_id) REFERENCES ware(w_name);
ORA-00600: internal error code, arguments: -5317, Cannot add foreign key constraint
该报错信息对应的错误码信息如下:
错误码:ORA-00600
OceanBase 错误码:5317
可能原因
添加外键约束时,如果外键的字段与关联字段的类型不匹配时,系统会报错。
解决方法
请参考以下步骤,查看当前表与关联表中各字段类型,确认关联表的主键后,再重新创建外键约束。
查看当前表和关联表
ware的表结构,确认引用列是否为主键或者唯一键。外键引用列必须为被引用表的唯一键或主键。obclient> DESC CUST; +--------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+------------+------+-----+---------+-------+ | C_ID | NUMBER(38) | NO | PRI | NULL | | | C_W_ID | NUMBER(38) | YES | | NULL | | +--------+------------+------+-----+---------+-------+ 2 rows in set obclient [SYS]> DESC WARE; +--------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+---------------+------+-----+---------+-------+ | W_ID | NUMBER(38) | NO | PRI | NULL | | | W_NAME | VARCHAR2(256) | YES | UNI | NULL | | | W_CITY | VARCHAR2(256) | YES | UNI | NULL | | +--------+--------------+------+-----+---------+-------+ 3 rows in set选择主键后重新创建外键约束。
obclient [SYS]> ALTER TABLE CUST ADD CONSTRAINT C_FK FOREIGN KEY (c_w_id) REFERENCES WARE(w_id); Query OK, 0 rows affected