jueves, 3 de julio de 2008

Oracle: campos autonuméricos y secuencias ( SEQUENCE )

Para poder crear campos autonúmericos, es decir, que se autoincrementen con las inserciones,tendremos que utilizar las "sequencias de oracle" dado que no existe un tipo de campo del tipo "autonumérico".

Creación de sentencias:
CREATE SEQUENCE nombre_de_la_secuencia
MINVALUE valor
MAXVALUE value
START WITH valor
INCREMENT BY valor
CACHE valor;

Minvalue = valor míninimo de la secuencia
Maxvalue = valro máximo de la scuencia. Si no se especifica el valor sera de 999999999999999999999999999
START WITH = valor por el que se va a comenzar
INCREMENT BY = por cuanto se incrementará el contador en cada llamada
CACHE = número de valores que se almacenarán en memoria, a modo de cache para aumentar el rendimiento

ej de creación
CREATE SEQUENCE personas_id
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 20;

Para usarlos se realiza la llamada nombre_de_la_secuencia.NextVal
Ejemplos:
- Numeración automática en una consulta
Select nombre_de_la_secuencia.NextVal, nombre, apellidos from t_persona

- Inserción
insert into t_personas_atendidas values (id , nombre) VALUES (nombre_de_la_secuencia.NextVal, 'Pollo Polea')

Para simular la autonumeración en la inserción en una tabla podemos crear un trigger:
create or replace trigger trg_autonumero
before insert on t_personas_atendidas
for each row
begin
if :new.id is null then
select nombre_de_la_secuencia.NextVal into :new.id from dual;
end if;
end;
/
Si tuviesemos algun problema en la compilación del trigger podemos ver los errores con:
show errors trg_autonumero

Este trigger sirve para insertar registros usando el autonumérico con algunas particularidades:
a)
Insert into t_personas_atendidas values (nombre) VALUES ("Pollo Polea");

Se inserta el registro, y se llama al autonumérico
b)
Insert into t_personas_atendidas values ( id, nombre) VALUES (12, "Pollo Polea");

Se inserta el registro usando el valor 12, no se usa en este caso el autonumérico.

No hay comentarios: