Oracle创建含REF类型对象表报ORA-00932数据类型不一致错误如何解决
ORA-00932错误原因
- 核心原因是
funcionario_type里的empresa字段为REF引用类型,你在创建funcionario_tab时用了对标量字段生效的普通外键语法声明关联,Oracle会默认预期关联字段是和empresa_tab主键同类型的标量值(这里匹配CNPJ的数值/字符类型),实际检测到的是REF类型,触发类型不匹配错误。 - 额外语法问题:Oracle中
CREATE TYPE语句执行结束后需要添加分隔符/,多个类型连续执行时如果缺少分隔符会出现语法识别异常。
正确修改方案
REF类型的关联约束不能使用普通外键语法,需改用SCOPE FOR子句限制引用范围,修改后的完整SQL如下:
CREATE TYPE empresa_type AS OBJECT ( CNPJ INTEGER, nome_fantasia VARCHAR2(30), pais VARCHAR2(25), fundacao DATE ); / CREATE TYPE funcionario_type AS OBJECT ( CPF INTEGER, nome VARCHAR2(30), sexo CHAR(1), nasc DATE, empresa REF empresa_type ); / CREATE TABLE empresa_tab OF empresa_type ( PRIMARY KEY(CNPJ) ); CREATE TABLE funcionario_tab OF funcionario_type ( PRIMARY KEY(CPF), SCOPE FOR (empresa) IS empresa_tab );
修改说明:
- 每个
CREATE TYPE语句末尾添加/作为执行分隔符,确保多个DDL语句可以顺序执行 - 替换普通外键声明为
SCOPE FOR (empresa) IS empresa_tab,限制empresa字段的引用只能指向empresa_tab表中的对象,符合REF类型的语法规则,同时满足关联约束需求。
内容的提问来源于stack exchange,提问作者Thiago Cavalcanti
相关产品推荐
相关产品推荐

