Base De Datos

  1. Enorable
  2. Base De Datos
  3. Inicializar Secuencia En Oracle
2
0
 
vistas: 216
Joswald Oropeza
| 22/05/2017

Inicializar una secuencia creada en Oracle

Procedimiento en PL SQL para inicializar una secuencia en la base de datos Oracle, probada en 9i y 10g.

Con el siguiente procedimiento creado en PL/SQL se puede inicializar un secuencia previamente creada en Oracle con el objetivo inicializarla para su posterior reutilización.

Digamos que desea generar un número consecutivo a través de la secuencia creada para asignar un valor único relacionado con cada uno de los registros procesados, en condiciones normales la secuencia le asignará un valor que se incrementaría según sea el caso (nextval). Sin embargo, existe la posibilidad de eliminar los registros para nuevamente re-procesarlos pero sin mantener la secuencia antes ejecutada y crear valor únicos de tipo ID, inicializados.

Al usar este procedimiento podremos reutilizar una secuencia en diferentes casos cuando sea necesario su inicialización a cero.

El procedimiento pasa como parámetros dos valores, de los cuales el primero indica el nombre de la secuencia y el segundo es un parámetro de salida que nos devuelve
verdadero o falso dependiendo de si la inicialización se completó con éxito.

Como veremos en el procedimiento es necesario consultar el último valor generado de la secuencia para luego incrementar negativamente dicho valor consultado, seguidamente es obligatorio realizar una nueva consulta que permitirá incrementar la secuencia a su valor inicial que a su vez, nos permitirá definitivamente inicializar su valor en cero.

Procedimiento que permite inicializar una secuencia creada en Oracle.

CREATE OR REPLACE PROCEDURE P_RESET_SEQ(p_squence IN VARCHAR2, p_salida IN OUT BOOLEAN)
AS
/* ************************************************************************************
* Procedimiento: p_reset_seq
* Descripción: inicializa una secuencia en su valor a cero
* Parametros: p_squence Nombre de la Secuencia
* *********************************************************************************
*/
v_valor NUMBER;
BEGIN

EXECUTE IMMEDIATE 'SELECT '||p_squence||'.nextval FROM DUAL' INTO v_valor;
EXECUTE IMMEDIATE 'ALTER SEQUENCE '||p_squence||' INCREMENT BY -'||v_valor||' MINVALUE 0';
EXECUTE IMMEDIATE 'SELECT '||p_squence||'.nextval FROM DUAL' INTO v_valor;
EXECUTE IMMEDIATE 'ALTER SEQUENCE '||p_squence||' INCREMENT BY 1 MINVALUE 0';
p_salida := TRUE;
EXCEPTION
WHEN OTHERS
THEN
p_salida := FALSE;
END P_RESET_SEQ;
/


(Enorable)