¿Qué es Secuencia en Oracle
- Oracle Sequence es un objeto creado por el usuario que varios usuarios pueden compartir para generar números enteros únicos
- El uso más general de las secuencias sería generar una columna de clave principal en la tabla.
- La secuencia es generada por la rutina interna de Oracle, por lo que no tenemos que preocuparnos por . Ahorrará tim3 ya que el desarrollador no necesita generar la rutina de producción de secuencias
- Un generador de números secuenciales, se puede configurar para aumentar o disminuir
- Existe solo en el diccionario de datos, puede ser limitado o repetible (ciclo).
- Necesitamos crear el privilegio de secuencia para crear la secuencia
La creación de una secuencia se realiza mediante el
CREAR SECUENCIA
[COMENZAR CON] [AUMENTAR POR] [NO/VALOR MÍNIMO] [NO/VALOR MÁXIMO] [SIN CICLO] [NO/CACHÉ];
|
Descripción de cada valor
COMENZAR CON | Define el valor inicial de la secuencia (por defecto 1 ), |
AUMENTAR POR | Define el nivel de aumento o disminución (por defecto 1 ), |
VALORMIN | Define el valor más bajo para una secuencia decreciente |
VALOR MÁXIMO | Define el valor más alto para una secuencia creciente |
CICLO | Define si la secuencia se repetirá |
CACHÉ | Define el bloque de números de secuencia guardados en la memoria (predeterminado 20 ), NOCACHE obliga a actualizar el diccionario de datos para cada número generado por la secuencia |
Ejemplos
crear secuencia test_tech comenzar con 1 incrementar en 1 maxvalue 10000 ciclo caché 20;
crear secuencia test_tech1
empezar con 1 |
Cómo usar secuencias
Para usar la secuencia, simplemente use la pseudocolumna CURRVAL y NEXTVAL
Pseudocolumna NEXTVAL
Se utiliza para generar el número de secuencia sucesivo de la secuencia especificada
Pseudocolumna CURRVAL
Contiene la secuencia que el usuario acaba de generar
SELECCIONE TEST_TECH.NEXTVAL FROM DUAL;
SELECCIONE TEST_TECH.CURRVAL DESDE DUAL; SELECCIONE TEST_TECH.NEXTVAL DESDE DUAL; |
Cómo modificar las secuencias
Podemos modificar las secuencias usando alterar secuencia.
SQL> ALTERAR SECUENCIA tech_test1 INCREMENTO EN 50; |
Los cambios afectan solo el uso futuro de la secuencia.
Debe ser el propietario o tener privilegios de modificación en esa secuencia
No podemos cambiar empezar con la opción. Para que esta secuencia se deba eliminar y volver a crear
Los cambios de secuencia también se validan
Cómo soltar la secuencia
La eliminación de una vista se realiza mediante el comando de secuencia DROP.
Secuencia de caída test_tech ; |
Vistas de diccionario para ver los datos de secuencia
los detalles de la secuencia se pueden consultar desde el diccionario consultando USER_SEQUENCES, ALL_ SEQUENCES o DBA_ SEQUENCES. Hay tres categorías de vistas
USUARIO_% | Esta vista contiene información de los objetos propiedad del usuario solamente
Ejemplo USER_TABLES,USER_TAB_COLS |
TODO-% | Esta vista contiene información de los objetos a los que el usuario puede acceder en la base de datos.
Ejemplo TODAS_TABLAS,TODAS_TAB_COLAS |
DBA_% | Esta vista contiene información de todos los objetos en el sistema y estas son vistas restringidas a las que puede acceder el usuario que tiene el rol de DBA
Ejemplo DBA_TABLES,DBA_TAB_COLS |
DBA_% vistas sobre información de secuencias | ALL_% vistas sobre información de secuencias | USER_% vistas sobre información de secuencias | |
Ver sobre secuencias información | secuencias_dba | todas_ secuencias | secuencias_usuario |
Para listar todas las secuencias propiedad del uso actual
seleccione nombre_secuencia de secuencias_usuario;
Para listar todas las secuencias en una base de datos:
Seleccione propietario, nombre_secuencia de dba_sequences;
Para listar secuencias accesibles para el usuario actual:
seleccione nombre_secuencia de todas las_secuencias
¿Cómo determinar toda la información sobre la secuencia?
seleccione nombre_secuencia,valor_mínimo,valor_máximo,incremento_por,último_número
DESDE DBA_SEQUENCES
donde PROPIETARIO ='
y NOMBRE_de_la_secuencia ='
Cómo recuperar el valor actual de una secuencia de Oracle sin incrementarla
La columna last_number muestra el siguiente número de secuencia disponible si no se especifica caché
SELECCIONE último_número
DESDE secuencias_de_usuario
WHERE nombre_secuencia =‘ |
Cómo extraer la definición de secuencia (sentencias DDL) de una base de datos Oracle sin tener que pasar por una pila de vistas de diccionario
Sintaxis:
SQL> set long 1000 SQL> set pagesize 0select DBMS_METADATA.GET_DDL('SEQUENCE','
|
Cómo establecer el valor LASTVALUE en una secuencia de Oracle
ALTERAR SECUENCIA tech_seq_name INCREMENTAR EN 250;
SELECCIONE tech_seq_name.nextval DESDE dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Cómo restablecer una secuencia en Oracle
Hay muchas maneras.
a) Podemos soltar y recrear la secuencia. Pero esto invalida todos los objetos dependientes (desencadenadores/procedimientos almacenados, etc.)
b) Podemos restablecer con estos sencillos pasos
Paso 1:encontrar el último valor de la secuencia
Seleccione tech_seq_name.nextval DESDE dual; Paso 2:modifique la secuencia con el incremento del valor negativo del último valor ALTER SEQUENCE tech_seq_name INCREMENT BY -<último valor> minvalue 0; Paso 3 Realiza nextval para volver a ponerlo a cero SELECCIONE tech_seq_name.nextval DESDE dual; Paso 4:cambie el incremento de nuevo a 1 ALTER SEQUENCE tech_seq_name INCREMENT BY 1; Ejemplo SELECCIONE tech_seq_name.nextval DESDE dual; ————————————— 250 ALTERAR SECUENCIA tech_seq_name INCREMENTO EN -250; SELECCIONE tech_seq_name.nextval DESDE dual; ALTER SEQUENCE tech_seq_name INCREMENT BY 1; |
Puedes encontrar más en este enlace
Cómo restablecer la secuencia
Impacto del almacenamiento en caché de las secuencias
Las secuencias se almacenan en caché con el fin de mejorar el rendimiento de recuperación. En RAC, cada instancia almacena los valores de caché
Podemos tener espacios en la secuencia cuando usamos el caché debido a las siguientes razones
- Se produce una reversión
- Caída del sistema o falla de la instancia
- La secuencia se usa en otra tabla
Hay una nueva función en Oracle 12c para secuencias
Secuencias de sesión
Con Oracle Database 12C, las nuevas palabras clave SESIÓN, GLOBAL están disponibles y se pueden especificar durante la creación de una secuenciaCREAR SECUENCIA test_session_seq COMENZAR CON 1 INCREMENTO POR 1 SESIÓN;
CREAR SECUENCIA test_global_seq COMENZAR CON 1 INCREMENTO POR 1 GLOBAL;
Global | Sesión |
crea una secuencia estándar bien conocida en la versión anterior. Este es el valor predeterminado. | crea un nuevo tipo de secuencia de sesión, que es un tipo especial de secuencia que está diseñado específicamente para usarse con tablas temporales globales que tienen visibilidad de sesión. La secuencia de sesión devuelve un rango único de números de secuencia solo dentro de una sesión, pero no entre sesiones. Otra diferencia es que las secuencias de sesión no son persistentes. Si una sesión desaparece, también desaparece el estado de las secuencias de sesión a las que se accedió durante la sesión. |