18 - Valores por defecto (default) |
Hemos visto que si al insertar registros no se especifica un valor para un campo que admite valores nulos, se ingresa automáticamente "null". A este valor se le denomina valor por defecto o predeterminado.
Un valor por defecto se inserta cuando no está presente al ingresar un registro.
Para campos de cualquier tipo no declarados "not null", es decir, que admiten valores nulos, el valor por defecto es "null". Para campos declarados "not null", no existe valor por defecto, a menos que se declare explícitamente con la cláusula "default".
Podemos establecer valores por defecto para los campos cuando creamos la tabla. Para ello utilizamos "default" al definir el campo. Por ejemplo, queremos que el valor por defecto del campo "autor" de la tabla "libros" sea "Desconocido" y el valor por defecto del campo "cantidad" sea "0":
create table libros( titulo varchar2(40) not null, autor varchar2(30) default 'Desconocido' not null, editorial varchar2(20), precio number(5,2), cantidad number(3) default 0 );
Si al ingresar un nuevo registro omitimos los valores para el campo "autor" y "cantidad", Oracle insertará los valores por defecto; en "autor" colocará "Desconocido" y en cantidad "0".
Entonces, si al definir el campo explicitamos un valor mediante la cláusula "default", ése será el valor por defecto.
La cláusula "default" debe ir antes de "not null" (si existiese), sino aparece un mensaje de error.
Para ver si los campos de la tabla "libros" tiene definidos valores por defecto y cuáles son, podemos realizar la siguiente consulta:
select column_name,nullable,data_default from user_tab_columns where TABLE_NAME = 'libros';
Muestra una fila por cada campo, en la columna "data_default" aparece el valor por defecto (si lo tiene), en la columna "nullable" aparece "N" si el campo no está definido "not null" y "Y" si admite valores "null".
También se puede utilizar "default" para dar el valor por defecto a los campos en sentencias "insert", por ejemplo:
insert into libros (titulo,autor,editorial,precio,cantidad) values ('El gato con botas',default,default,default,100);
Entonces, la cláusula "default" permite especificar el valor por defecto de un campo. Si no se explicita, el valor por defecto es "null", siempre que el campo no haya sido declarado "not null".
Los campos para los cuales no se ingresan valores en un "insert" tomarán los valores por defecto:
- si permite valores nulos y no tiene cláusula "default", almacenará "null";
- si tiene cláusula "default" (admita o no valores nulos), el valor definido como predeterminado;
- si está declarado explícitamente "not null" y no tiene valor "default", no hay valor por defecto, así que causará un error y el "insert" no se ejecutará.
Un campo sólo puede tener un valor por defecto. Una tabla puede tener todos sus campos con valores por defecto. Que un campo tenga valor por defecto no significa que no admita valores nulos, puede o no admitirlos.
Un campo definido como clave primaria acepta un valor "default", pero no tiene sentido ya que el valor por defecto solamente podrá ingresarse una vez; si intenta ingresarse cuando otro registro ya lo tiene almacenado, aparecerá un mensaje de error indicando que se intenta duplicar la clave.