2010-05-03 19 views
8

devo migrare questa ricerca (semplificato qui) da T-SQL per ORACLEQuale comando sostituirà IDENTITY INSERT ON/OFF da SQLServer in Oracle?

SET IDENTITY_INSERT table ON 

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

SET IDENTITY_INSERT table OFF 

id essere un campo Identità in SQLServer.

Ho la stessa tabella con una sequenza in Oracle, non ho trovato un frammento che mostra come disattivare la sequenza e impostare per ricominciare con il MAX (id) + 1.

Qualunque ORACLE esperto può aiutarmi con questo?

Grazie, Rodrigo.

risposta

7

Non è necessario disabilitare l'identità in Oracle. Dal momento che stai usando sequenze, non usarlo per quell'inserto.

Cioè, invece di

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

si utilizza

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

Per quanto riguarda la seconda domanda di riavviare la sequenza, penso che si risponde here in SO.

+0

Se si intende mantenere identica l'identità (che sembra essere il caso), questa non è una soluzione. –

+0

@Nate: ti sei perso dove si dice "MAX (id) +1" –

1

Messing con colonne popolate da sequenze Oracle in questo modo sembra una cattiva idea. In Oracle, si mantiene in genere una colonna popolata tramite sequenze con un trigger. Se si attiva e disattiva questa funzione e si reimposta la sequenza ad lib, si corre il rischio che una sequenza non sia disponibile quando un altro processo ne ha bisogno, o si ripristina su un valore che è già stato utilizzato ma non impegnato.

+1

I trigger non sono necessari fintanto che 'sequence.NEXTVAL' è usato in tutte le istruzioni INSERT per la tabella, che in realtà dovrebbe accadere solo in una singola stored procedure comunque . –

+0

+1 sia per la risposta che per il commento per il consiglio ragionevole. –

0

Eliminare le sequenze e ricrearle quando hai finito con il valore max + 1.

+0

supponendo che questo sia un ETL 1- –

+1

Questo invalida il codice che dipende da quella sequenza e cancella anche tutti i privilegi nel processo. Se questo non è un problema, questa è l'opzione più semplice. –

+0

@Rob: buon punto sugli effetti collaterali. – DCookie

Problemi correlati