2010-05-03 10 views
8

que tienen que migrar esta consulta (simplificado aquí) de T-SQL para Oracle¿Qué comando reemplazaría a INSERTTY INSERT ON/OFF de SQLServer en Oracle?

SET IDENTITY_INSERT table ON 

INSERT INTO table (id, value) VALUES (1, 2) 

SET IDENTITY_INSERT table OFF 

id siendo un campo de identidad de SQL Server.

que tienen la misma mesa con una secuencia en ORACLE, no pude encontrar un fragmento que muestra cómo desactivar la secuencia y la puso a empezar de nuevo con el MAX (id) + 1.

Cualquier ORACLE experto puede ayudarme con esto?

Gracias, Rodrigo.

Respuesta

7

No tiene que deshabilitar la identidad en Oracle. Como está usando secuencias, simplemente no las use para esa inserción.

Es decir, en lugar de

insert into table (id, values) values (table_seq.nextval, 2) 

que utilizan

insert into table (id, values) values (1, 2) 

En cuanto a su segunda pregunta acerca de cómo reiniciar la secuencia, creo que es contestada here en SO.

+0

Si tiene la intención de mantener la identidad igual (lo que parece ser el caso) esta no es una solución. –

+0

@Nate: Falló donde dice "MAX (id) +1" –

1

Enlazar con columnas pobladas por secuencias de Oracle de esta manera parece una mala idea. En Oracle, normalmente mantiene una columna poblada por secuencias con un desencadenador. Si enciende y apaga esta función y restablece la secuencia ad lib, corre el riesgo de que una secuencia no esté disponible cuando otro proceso la necesite o de que se restablezca a un valor que ya se haya utilizado pero no se haya confirmado.

+1

Los desencadenadores son innecesarios siempre que 'sequence.NEXTVAL' se use en todas las instrucciones INSERT para la tabla, lo que en realidad solo debería ocurrir en un solo procedimiento almacenado de todos modos . –

+0

+1 tanto para la respuesta como para el comentario para el consejo. –

0

Suelta las secuencias y vuelve a crearlas cuando hayas terminado con el valor máximo + 1.

+0

suponiendo que se trata de una vez ETL –

+1

Esto invalida el código que depende de esa secuencia y también descarta todos los privilegios en el proceso. Si eso no es un problema, esta es la opción más fácil. –

+0

@Rob: Buen punto sobre los efectos secundarios. – DCookie

Cuestiones relacionadas