ORA-02267

ORA-02267: tipo de columna incompatible con el tipo de columna referenciada.

El tipo de datos de la columna de referencia es incompatible con él, seleccione un tipo de datos compatible para la columna de referencia.

Ejemplo

Creamos la Relación llamado Empleado, con las siguientes columnas (estas no están normalizadas solo para ejemplificación.

create table empleado (id_emp integer, nombres varchar2(25),
apellidos varchar2(25));
create tabla empleado

create tabla empleado

id_emp: que es el identificador único y la volveremos primary key.
nombres: nombres de los empleados
apellidos: apellidos de los empleados.

Alteramos la relación de empleado para asignar el primay key.

alter table empleado
add constraint pk_empleado
primary key (id_emp);
alter tabla empleado

alter tabla empleado

Creamos la Relación de Puesto:

create table puesto (id_puesto integer, nombredelpuesto varchar2(25), sueldo integer,
id_emp char);
create tabla puesto

create tabla puesto

id_ puesto: que es el identificador único del puesto y la volveremos primary key.
nombrdelpuesto: el cargo o nombre del puesto.
sueldo: cantidad de honorarios al puesto que desempeña.
id_ emp: foreign key, esta es la que se enlazara con la Relación Empleado.

Alteramos la relación de puesto para asignar el primay key.

alter table puesto
add constraint pk_puesto
primary key (id_puesto);
alter tabla puesto

alter tabla puesto

Ahora provocaremos el ORA-02267 al asignar la llave foránea, y a que los tipos de datos son diferentes en ambas relaciones puesto, empleado:

alter table puesto
add constraint FK_emp_puesto
foreign key (id_emp)
references empleado(id_emp);
ORA-02267

ORA-02267

Explicacion:

El error se da cuando el primary que se enlace con otra relación no es el mismo tipo de dato, en este caso: id_emp en la relación puesto es de tipo char, mientras id_emp en la relación empleado es de tipo integer, de allí se genera este error.

Esta entrada fue publicada en Oracle Data Base y etiquetada . Guarda el enlace permanente.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *