2011-10-20 40 views
5

Recientemente, me encontré con un problema relacionado con el incremento de los valores de secuencia dentro de una declaración de fusión.Comportamiento de la secuencia en Oracle Merge Statements

La cláusula MERGE INSERT, está accediendo a una secuencia para llenar una de las columnas. Noté que, no importa cuántas filas sean realmente elegibles para la inserción, la secuencia termina incrementándose para la cantidad total de registros en la cláusula SELECT de origen.

¿Por qué eso puede estar pasando?

estoy trabajando en Oracle 10gR2

Gracias,

+0

he encontrado la respuesta. Según la documentación de Oracle, la secuencia se incrementará para cada registro fusionado y no importa cuántos registros se inserten realmente. – Incognito

+0

[link] (http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#sthref809) – Incognito

+3

Debe convertir sus comentarios en una respuesta y luego aceptarlo. Puede aceptar sus propias respuestas (incluso podría obtener una insignia). Las respuestas aceptadas son el juego final de SO. – APC

Respuesta

2

Puede resolver esto mediante el uso de una función para incrementar el valor como esto

CREATE OR REPLACE 
FUNCTION seq_nextval_on_demand (p_seq_name IN VARCHAR2) 
    RETURN NUMBER 
IS 
    v_seq_val NUMBER; 
BEGIN 
    EXECUTE IMMEDIATE 'select ' || p_seq_name || '.nextval from dual' 
    INTO v_seq_val; 

    RETURN v_seq_val; 
END seq_nextval_on_demand; 

la lógica es la función que se llama sólo cuando "insertar" rama de la declaración de combinación se utiliza realmente.

para referirse aún más esta http://alex-td.blogspot.in/2012/07/sequences-nextval-in-merge-operator.html

Cuestiones relacionadas