2010-05-03 8 views
8

muszę migrował zapytanie (uproszczony tutaj) z T-SQL do ORACLEKtóre polecenie zastąpiłoby IDENTITY INSERT ON/OFF z SQLServer w Oracle?

SET IDENTITY_INSERT table ON 

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

SET IDENTITY_INSERT table OFF 

id jest pole tożsamość SQLServer.

Mam ten sam stół z sekwencji w Oracle, nie mogłem znaleźć fragment, który pokazuje, jak wyłączyć sekwencję i ustawić go uruchomić ponownie z MAX (id) + 1.

Wszelkie ORACLE ekspert może mi w tym pomóc?

Dzięki, Rodrigo.

Odpowiedz

7

Nie musisz wyłączać tożsamości w Oracle. Ponieważ używasz sekwencji, po prostu nie używaj jej dla tej wstawki.

Oznacza to, że zamiast

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

użyć

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

Co do drugiego pytania o ponowne uruchomienie sekwencji, myślę, że odbierze here w SO.

+0

Jeśli masz zamiar zachować to samo tożsamość (co wydaje się być), nie jest to rozwiązanie. –

+0

@Nate: Tęskniłeś tam, gdzie jest napisane "MAX (id) +1" –

1

Przesyłanie wiadomości z kolumnami wypełnionymi sekwencjami Oracle w ten sposób wygląda na Zły pomysł. W Oracle zazwyczaj utrzymuje się kolumnę wypełnioną sekwencjami z wyzwalaczem. Jeśli zaczniesz włączać i wyłączać tę funkcję, a także zresetować bibliotekę reklam sekwencji, ryzykujesz, że sekwencja nie będzie dostępna, gdy inny proces tego potrzebuje, lub gdy zresetujesz ją do wartości, która została już użyta, ale nie została zatwierdzona.

+1

Wyzwalacze są niepotrzebne, dopóki 'sequence.NEXTVAL' jest używane we wszystkich instrukcjach INSERT dla tabeli, co tak naprawdę powinno się zdarzyć tylko w jednej przechowywanej procedurze. . –

+0

+1 zarówno do odpowiedzi, jak i komentarza do rozsądnej porady. –

0

Porzuć sekwencje i ponownie je utwórz, gdy skończysz z wartością maks. + 1.

+0

zakładając, że jest to 1-krotny ETL –

+1

To powoduje unieważnienie kodu, który zależy od tej sekwencji i powoduje również utratę wszystkich uprawnień w procesie. Jeśli to nie jest problem, to jest to najłatwiejsza opcja. –

+0

@Rob: Dobry punkt na efekty uboczne. – DCookie

Powiązane problemy