viernes, 11 de noviembre de 2016

SEQUENCES

Una secuencia es un objeto de base de datos que crea valores enteros. Puede crear secuencias y utilizarlas después para generar números. 

Una secuencia es un objeto de base de datos creados por el usuario que pueden compartir varios usuarios para generar enteros. 
Puede definir una secuencia para generar valores únicos o para reciclar y volver a utilizar los números. 

Un uso habitual para las secuencias es la creación de un valor de clave primario, que debe ser único para cada fila. La secuencia se genera y se incrementa (o disminuye) en una rutina interna de Oracle. Puede servir para ahorrar tiempo, ya que reduce la cantidad de código de aplicación necesario para escribir una secuencia de generación de secuencias. 
Los números de secuencias se almacenan y se generan independientemente de las tablas. Por lo tanto, se puede utilizar la misma secuencia para varias tablas. 

Una secuencia: 
  • Puede generar automáticamente números únicos 
  • Es un objeto compartible 
  • Se puede utilizar para crear un valor de clave primaria 
  • Sustituye al código de la aplicación 
  • Acelera la eficacia de acceso a valores de secuencia cuando se almacenan en caché en la memoria
Genere números secuenciales automáticamente mediante la sentencia CREATE SEQUENCE
En la sintaxis: 

sequence       es el nombre del generador de secuencias 
INCREMENT BY n     especifica el intervalo entre números de secuencia, donde n es un entero (Si se                                         omite esta cláusula, la secuencia se incrementa en 1.) 
START WITH n      especifica el primer número de secuencia que se generará (Si se omite esta cláusula, la secuencia mpieza en 1.) 
MAXVALUE n       especifica el valor máximo que puede generar la secuencia 
NOMAXVALUE           especifica un valor máximo de 10^27 para una secuencia                                              ascendente y de –1 para una descendente (Ésta es la  opción por defecto.) 
MINVALUE n especifica el valor mínimo de secuencia 
NOMINVALUE        especifica un valor mínimo de 1 para una secuencia ascendente y de –(10^26) para una descendente (Ésta es la opción por                                                       defecto.)  
CYCLE | NOCYCLE especifica si la secuencia continúa generando valores después de alcanzar sus valores máximo o mínimo (NOCYCLE es la opción por defecto.) 
CACHE n | NOCACHE especifica cuántos valores preasigna y mantiene en memoria Oracle Server (Por defecto, Oracle Server almacena en caché 20 valores.) 


El ejemplo de la diapositiva crea una secuencia denominada DEPT_DEPTID_SEQ que se utilizará para la columna DEPARTMENT_ID de la tabla DEPARTMENTS. La secuencia comienza en 120, no permite almacenar en caché y no se repite en un ciclo. 

No utilice la opción CYCLE si la secuencia se utiliza para generar valores de clave primaria, a menos que disponga de un mecanismo fiable que depure las filas antiguas más rápidamente que los ciclos de la secuencia. 

Para obtener más información, consulte “CREATE SEQUENCE” en Oracle SQL Reference. 
Nota: La secuencia no está vinculada a una tabla. Por lo general, debe poner nombre a la secuencia después del uso para el que se concibe. Sin embargo, la secuencia se puede utilizar en cualquier parte, independientemente de su nombre.

Uso de SEQUENCE

Inserte un nuevo departamento denominado “Support” en el identificador de ubicación 2500:

INSERT INTO departments(department_id,department_name, location_id)
VALUES   (dept_deptid_seq.NEXTVAL,  'Support', 2500);

Vea el valor actual en la secuencia DEPT_DEPTID_SEQ: 

SELECT dept_deptid_seq.CURRVAL 
FROM  dual; 

Supongamos que desea contratar empleados para el nuevo departamento. La sentencia INSERT que se debe ejecutar para todos los nuevos empleados puede incluir el siguiente código: 
INSERT INTO employees (employee_id, department_id, ...) 
VALUES (employees_seq.NEXTVAL, dept_deptid_seq .CURRVAL, ...); 

Nota: El ejemplo anterior supone que ya se ha creado una secuencia denominada EMPLOYEE_SEQ para generar nuevos números de empleado. 

Caché de Valores de Secuencia 

Puede almacenar en caché secuencias de la memoria para proporcionar un acceso más rápido a esos valores de secuencia. El caché se rellena la primera ver que hace referencia a la secuencia. Cada solicitud del siguiente valor de secuencia se recupera de la secuencia almacenada en caché. Una vez utilizado el último valor de secuencia, la siguiente solicitud de secuencia obtendrá otra caché de secuencias en la memoria. 

Intervalos en la Secuencia 
Aunque los generadores de secuencias emiten números secuenciales sin intervalos, esta acción se produce independientemente de una validación o un ROLLBACK. Por lo tanto, si hace ROLLBACK. de una sentencia que contiene una sentencia, se perderá el número. 

Otro evento que puede provocar intervalos en la secuencia es un error del sistema. Si la secuencia almacena en caché valores en la memoria, esos valores se pierden si hay un error del sistema. 

Como las secuencias no están vinculadas directamente a tablas, se puede utilizar la misma secuencia para varias tablas. Si lo hace, cada tabla puede contener intervalos en los números secuenciales. 
  • Almacenar en caché en la memoria los valores de secuencia otorga un acceso más rápido a dichos valores. 
  • Se pueden producir intervalos en los valores de secuencia cuando: 
    • Se produce un rollback 
    • Se produce un error en el sistema 
    • Se utiliza una secuencia en otra tabla 

Modificación de Secuencias 
Cambie el valor de incremento, el valor máximo, el valor mínimo, la opción de ciclo o la opción de caché:

Si alcanza el límite MAXVALUE para la secuencia, no se asigna ningún valor adicional y recibirá un error que indicará que la secuencia excede el valor MAXVALUE. Para continuar utilizando la secuencia, la puede modificar mediante la sentencia ALTER SEQUENCE.
Sintaxis
 ALTER SEQUENCE sequence
    [INCREMENT BY n]
    [{MAXVALUE n | NOMAXVALUE}]
    [{MINVALUE n | NOMINVALUE}]
    [{CYCLE | NOCYCLE}]
    [{CACHE n | NOCACHE}];

En la sintaxis, sequence es el nombre del generador de secuencias.
Para obtener más información, consulte “ALTER SEQUENCE” en Oracle SQL Reference.

Instrucciones para Modificar una Secuencia 
Debe ser el propietario de la secuencia o tener el privilegio ALTER para modificarla. Debe ser el propietario de la secuencia o tener el privilegio DROP ANY SEQUENCE para eliminarla. 
Sólo los números de secuencia futuros se ven afectados por la sentencia ALTER SEQUENCE
La opción START WITH no se puede cambiar mediante ALTER SEQUENCE. Se debe borrar la secuencia y volver a crearla para reiniciarla en un número diferente. 
Se llevan a cabo algunas validaciones. Por ejemplo, no se puede imponer un nuevo valor MAXVALUE que sea menor que el número actual de secuencia. 

ALTER SEQUENCE dept_deptid_seq
   INCREMENT BY 20
   MAXVALUE 90
   NOCACHE
   NOCYCLE;
ALTER SEQUENCE dept_deptid_seq
*
ERROR at line 1: 

ORA-04009: MAXVALUE cannot be made to be less than the current value

Debe ser el propietario de la secuencia o tener el privilegio ALTER en ella. 

  • Sólo afecta a los números de secuencias futuras. 
  • Se debe borrar la secuencia y volver a crearla para reiniciarla en un número diferente. 
  • Se llevan a cabo algunas validaciones. 
  • Para eliminar una secuencia, utilice la sentencia DROP
  • Debe ser el propietario de la secuencia o tener el privilegio ALTER en ella.
Share:

0 comentarios:

Publicar un comentario

Archivo

Cual es el tema de mayor interes para ti?