35 - Secuencias (create sequence - currval - nextval - drop sequence) |
Una empresa registra los datos de sus empleados en una tabla llamada "empleados".
1- Elimine la tabla "empleados":
drop table empleados;
2- Cree la tabla:
create table empleados( legajo number(3), documento char(8) not null, nombre varchar2(30) not null, primary key(legajo) );
3- Elimine la secuencia "sec_legajoempleados" y luego créela estableciendo el valor mínimo (1), máximo (999), valor inicial (100), valor de incremento (2) y no circular. Finalmente inicialice la secuencia.
4- Ingrese algunos registros, empleando la secuencia creada para los valores de la clave primaria:
insert into empleados values (sec_legajoempleados.currval,'22333444','Ana Acosta'); insert into empleados values (sec_legajoempleados.nextval,'23444555','Betina Bustamante'); insert into empleados values (sec_legajoempleados.nextval,'24555666','Carlos Caseros'); insert into empleados values (sec_legajoempleados.nextval,'25666777','Diana Dominguez'); insert into empleados values (sec_legajoempleados.nextval,'26777888','Estela Esper');
5- Recupere los registros de "libros" para ver los valores de clave primaria.
Note que los valores se incrementaron en 2, porque así se estableció el valor de incremento al crear la secuencia.
6- Vea el valor actual de la secuencia empleando la tabla "dual". Retorna 108.
7- Recupere el valor siguiente de la secuencia empleando la tabla "dual" Retorna 110.
8- Ingrese un nuevo empleado (recuerde que la secuencia ya tiene el próximo valor, emplee "currval" para almacenar el valor de legajo)
9- Recupere los registros de "libros" para ver el valor de clave primaria ingresado anteriormente.
10- Incremente el valor de la secuencia empleando la tabla "dual" (retorna 112)
11- Ingrese un empleado con valor de legajo "112".
12- Intente ingresar un registro empleando "currval":
insert into empleados values (sec_legajoempleados.currval,'29000111','Hector Huerta');
Mensaje de error porque el legajo está repetido y la clave primaria no puede repetirse.
13- Incremente el valor de la secuencia. Retorna 114.
14- Ingrese el registro del punto 11.
Ahora si lo permite, pues el valor retornado por "currval" no está repetido en la tabla "empleados".
15- Recupere los registros.
16- Vea las secuencias existentes y analice la información retornada.
Debe aparecer "sec_legajoempleados".
17- Vea todos los objetos de la base de datos actual que contengan en su nombre la cadena "EMPLEADOS".
Debe aparacer la tabla "empleados" y la secuencia "sec_legajoempleados".
18- Elimine la secuencia creada.
19- Consulte todos los objetos de la base de datos que sean secuencias y verifique que "sec_legajoempleados" ya no existe.
Ver solucióndrop table empleados; create table empleados( legajo number(3), documento char(8) not null, nombre varchar2(30) not null, primary key(legajo) ); drop sequence sec_legajoempleados; create sequence sec_legajoempleados start with 100 increment by 2 maxvalue 999 minvalue 1; select sec_legajoempleados.nextval from dual; insert into empleados values (sec_legajoempleados.currval,'22333444','Ana Acosta'); insert into empleados values (sec_legajoempleados.nextval,'23444555','Betina Bustamante'); insert into empleados values (sec_legajoempleados.nextval,'24555666','Carlos Caseros'); insert into empleados values (sec_legajoempleados.nextval,'25666777','Diana Dominguez'); insert into empleados values (sec_legajoempleados.nextval,'26777888','Estela Esper'); select *from empleados; select sec_legajoempleados.currval from dual; select sec_legajoempleados.nextval from dual; insert into empleados values (sec_legajoempleados.currval,'27888999','Federico Fuentes'); select *from empleados; select sec_legajoempleados.nextval from dual; insert into empleados values (112,'28999000','Gaston Gonzalez'); insert into empleados values (sec_legajoempleados.currval,'29000111','Hector Huerta'); select sec_legajoempleados.nextval from dual; insert into empleados values (sec_legajoempleados.currval,'29000111','Hector Huerta'); select *from empleados; select *from all_sequences; select object_name,object_type from all_objects where object_name like '%EMPLEADOS%'; drop sequence sec_legajoempleados; select object_name,object_type from all_objects where object_type='SEQUENCE';