2015-08-03 12 views
5

Używam funkcji IDENTITY oracle 12 c, aby zwiększyć identyfikator rekordu tabeli.
W ramach wstępnej konfiguracji musimy przenieść niektóre rekordy z innego systemu do tej tabeli. te zapisy są zapisami niesekwencyjnymi (częściowe rekordy są usuwane).Jak zresetować kolumnę IDENTITY w oracle do nowej wartości

Jak sprawić, aby tożsamość zawsze tworzyła najwyższą wartość value + 1 na podstawie rekordów tabeli.

Po wyszukiwaniu różnych opcji dostępnych słowo kluczowe o wartości opcji RESTART WITH. W tym celu musimy stworzyć nową procedurę składowania i zmienić wszystkie tabele z najwyższymi możliwymi wartościami, aby ponownie uruchomić.

Czy istnieje dowolne bezpośrednie słowo kluczowe, które może być używane wraz z IDENTITY, które może wymusić na jego ponownym generowaniu wyższych wartości. ?

+0

RESTART WITH Funkcja nie działa, mimo że jest zalecana jako opcja w dokumentach Oracle. Tylko opcja wydaje się zmieniać tabelę i zmuszać TOŻSAMOŚĆ do zaczynania od najwyższej wartości + 1. – sims

+0

"restart with" nie jest oracle, może mysql? – Scott

Odpowiedz

1

Brak bezpośredniego słowa kluczowego i trzeba zmienić tabelę (właściwe słowa to START Z).
Istnieje inny sposób na zmianę znaku Highwatermark dla tożsamości. Jeśli chodzi o typowe sekwencje (przy okazji, gdy tożsamość jest zbudowana na sekwencji systemu), użyj starej sztuczki z INCREMENT BY, aby przesunąć znacznik w dowolnych kierunkach.

ALTER TABLE T 
MODIFY (ID NUMBER GENERATED ALWAYS AS IDENTITY 
INCREMENT BY 50 
NOCACHE); 

Oznacza to, że jeśli teraz następna wartość jest 100 i trzeba zrobić to 1000, zrobić ten trick dwa razy: „przyrost o 900”, rekord iz powrotem dodać „przyrost o 1” (jeśli tożsamość z krokiem 1).

3

Stało się bardzo łatwe w 12c

alter table your_table modify (id generated by default on null as identity 
           start with limit value); 

Potem kolejna wkładka będzie bezpiecznie włożyć stosując sekwencję, która została automatycznie powraca do tego, co jest w zasadzie max (id) +1 https://docs.oracle.com/database/121/SQLRF/statements_3001.htm#SQLRF01001

+0

Zawsze otrzymuję _ORA-30673: kolumna, która ma zostać zmodyfikowana, nie jest kolumną tożsamości, gdy próbuje ustawić kolumnę jako kolumnę tożsamości. Wygląda na to, że możesz modyfikować ustawienia istniejącej kolumny tożsamości, a nie przekształcać istniejącej kolumny innej niż tożsamość w jedną. –

+0

Prawidłowo. Ta instrukcja służy do resetowania wartości sekwencji, a nie do migrowania zachowania kolumny. Zobacz na przykład http://www.grassroots-oracle.com/2016/10/decommissioning-triggers-in-12c.html – Scott

Powiązane problemy