35 - Secuencias (create sequence - currval - nextval - drop sequence)


Primer problema:

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ón

  drop 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';

 


Retornar