Resumen: en este tutorial, aprenderá a usar la restricción NOT NULL de Oracle para hacer que una columna no acepte valores NULL.
- Ejemplos de restricciones de Oracle NOT NULL
- La columna de cantidad puede aceptar valores NULL.
- Eliminar restricciones NOT NULL
Una restricción NOT NULL de Oracle especifica que una columna no puede contener valores NULL. Las restricciones NOT NULL de Oracle son restricciones en línea que se utilizan normalmente en la definición de columna de la declaración
CREATE TABLE. CREATE TABLE table_name ( ... column_name data_type NOT NULL ... );
Es posible agregar una restricción NOT NULL a una tabla existente usando la instrucción ALTER TABLE.
ALTER TABLE table_name MODIFY ( column_name NOT NULL);
En este caso, column_name no debe contener ningún valor NULL antes de aplicar la restricción NOT NULL.
Ejemplos de restricciones de Oracle NOT NULL
La siguiente declaración crea la tabla de surcharges:
CREATE TABLE surcharges ( surcharge_id NUMBER GENERATED BY DEFAULT AS IDENTITY, surcharge_name VARCHAR2(255) NOT NULL, amount NUMBER(9,2), PRIMARY KEY (surcharge_id) );
La tabla de surcharges tiene tres columnas: surcharges_id, surcharges_name y amount.
La columna surcharge_id es la columna de clave principal de la tabla especificada por la restricción PRIMARY KEY, por lo tanto, Oracle agrega implícitamente una restricción NOT NULL a esta columna.
La columna surcharge_name tiene una restricción NOT NULL especificada explícitamente en la definición de la columna.
La columna de cantidad puede aceptar valores NULL.
La siguiente declaración inserta una fila en la tabla de surcharges:
INSERT INTO surcharges(surcharge_name, amount) VALUES('Late order placement',10);
Funciona como se esperaba.
Sin embargo, la siguiente declaración no funciona:
INSERT INTO surcharges(surcharge_name, amount) VALUES(null,20);
Porque intenta insertar un valor NULL en la columna de surcharges que tiene una restricción NOT NULL.
La siguiente declaración funciona porque la columna de cantidad acepta valores NULL:
INSERT INTO surcharges(surcharge_name, amount) VALUES('Rush Order',NULL);
La siguiente declaración muestra todas las restricciones de la tabla de surcharges:
SELECT table_name, constraint_name, search_condition FROM user_constraints WHERE table_name = 'SURCHARGES';
Si desea agregar una restricción NOT NULL a la columna de cantidad, use la siguiente instrucción ALTER TABLE:
ALTER TABLE surcharges MODIFY (amount NOT NULL);
El siguiente error ha ocurrido:
SQL Error: ORA-02296: cannot enable (OT.) – null values found
Porque la tabla de surcharges contiene un valor NULO.
Entonces, antes de agregar la restricción NOT NULL, debe asegurarse de que los datos existentes en la tabla de recargos no violen la restricción NOT NULL:
UPDATE surcharges SET amount = 0 WHERE amount IS NULL;
Ahora, si ejecuta la instrucción ALTER TABLE nuevamente:
ALTER TABLE surcharges MODIFY (amount NOT NULL);
Debería funcionar como se esperaba.
Eliminar restricciones NOT NULL
A veces, es necesario cambiar una columna con una restricción NOT NULL para aceptar valores NULL.
Para hacer esto, debe eliminar la restricción NOT NULL de la columna utilizando la instrucción ALTER TABLE como se muestra a continuación:
ALTER TABLE table_name MODIFY ( column_name NULL)
Por ejemplo, para eliminar la restricción NOT NULL de la columna de amount de la tabla de surcharges, utilice la siguiente declaración:
ALTER TABLE surcharges MODIFY (amount NULL);
En este tutorial, ha aprendido a utilizar la restricción NOT NULL de Oracle para hacer que una columna no acepte valores NULL.
Pingback: Introducción a SQL - DBandTech.com