Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: mensaje de error ORA-01451
Aprenda por qué y cómo resolver los mensajes de error ORA-01451 en Oracle.
describir
Cuando encuentra un error ORA-01451, aparece el siguiente mensaje de error:
- ORA-01451: la columna que se modificará a NULL no se puede modificar a NULL
razón
Intentó ALTER TABLE MODIFY para intentar alterar una columna para permitir valores NULL, pero la columna ya permite valores NULL, o la columna se usa para una clave principal o una restricción de verificación y no puede aceptar valores NULL.
resolver
Las opciones para resolver este error de Oracle incluyen:
Opción 1
Suelte una clave principal o verifique el índice de restricción que le impide cambiar una columna para permitir valores NULL.
Opcion 2
La columna ya permite valores NULL y no se requiere ninguna acción.
Escenario 1
Por ejemplo, si tiene una tabla llamada proveedores, definida de la siguiente manera:
CREATE TABLE suppliers ( supplier_name varchar2(50) NOT NULL, city varchar2(35), state varchar2(2), zip varchar2(10), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_name) );
Luego ejecute la siguiente instrucción ALTER TABLE
ALTER TABLE suppliers MODIFY supplier_name NULL;
Recibirá el siguiente mensaje de error:
Puede corregir el error eliminando la clave principal de la tabla de proveedores:
ALTER TABLE suppliers DROP CONSTRAINT suppliers_pk;
El campo nombre_proveedor ahora se definirá para permitir valores NULL.
Escenario #2
Por ejemplo, si tiene una tabla llamada proveedores, definida de la siguiente manera:
CREATE TABLE suppliers ( supplier_name varchar2(50), city varchar2(35), state varchar2(2), zip varchar2(10) );
Luego ejecute la siguiente instrucción ALTER TABLE
ALTER TABLE suppliers MODIFY supplier_name NULL;
Recibirá el siguiente mensaje de error:
Este error se produce porque ha definido la columna Nombre del proveedor para permitir valores NULL, por lo que no se requiere ninguna acción.