sql >> Base de Datos >  >> RDS >> Oracle

¿Qué es la secuencia en Oracle?

¿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
incremento de 1
valor máximo 4500000
ciclo
nocache;

 

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','') from DUAL;

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

  1. Se produce una reversión
  2. Caída del sistema o falla de la instancia
  3. 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 secuencia
CREAR 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.