2017-10-30 2 views
1

Ich habe eine vorhandene Tabelle emp_table (pk_emp, Name, Adresse, Kontakt, dob). Diese Tabelle enthält mehr als 10000 Datensätze. Jetzt brauche ich eine Sequenz, um Daten in diese Tabelle mit nächsten pk_emp Wert einzufügen. Wie sollte ich diese Sequenz erstellen, die mit dem nächsten Wert pk_emp beginnt und für zukünftige Einfügungen in dieser Tabelle verwendet werden kann.Verwenden Sie Sequenz für Autoinkrement PK der vorhandenen Tabelle

+0

https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm 'erstellen oder Sequenz ersetzen ... Start mit ... ' –

+0

Welche Oracle-Version verwenden Sie? –

Antwort

0

In Oracle können Sie Sequenz erzeugen, die einen Wert von beginnt Sie wollen (alles, was Sie tun müssen, ist setzen START WITH):

https://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm

etwas wie folgt aus:

CREATE SEQUENCE pk_emp_seq 
    START WITH 10000 -- specify the right value here 
    INCREMENT BY 1 
     NOCACHE 
     NOCYCLE; 

Bearbeiten: Wenn Sie eine dynamische Implementierung wollen, versuchen Sie Putti ng den Code oben in execute immediate:

https://docs.oracle.com/database/122/LNPLS/EXECUTE-IMMEDIATE-statement.htm#LNPLS01317

declare 
    start_with emp_table.pk_emp%Type; 
begin 
    select max(pk_emp) + 1 
    into start_with 
    from emp_table; 

    -- the same create sequence as in the sample above, but with dynamic "parameter" 
    execute immediate 
    'CREATE SEQUENCE pk_emp_seq 
      START WITH ' || To_Char(start_with) || 
    ' INCREMENT BY 1 
      NOCACHE 
      NOCYCLE'; 
end; 
+0

Ja, ich habe auch das gleiche getan, es funktioniert gut. Aber ich brauche einen dynamischen Wert bei start with clause, der der nächste Maximalwert von pk_emp sein sollte. Das liegt daran, dass die Abfrage in einer anderen Umgebung ausgeführt werden muss, in der ich den maximalen Wert von pk_emp nicht kenne. – Vimal

+0

@Vimal: Wenn Sie ein * Skript * wollen, das Sie auf * verschiedenen Datenbanken * (Schemas) ausführen können, können Sie versuchen, 'execute sofort' auszuführen. –

+0

Ja. Es funktioniert gut. Vielen Dank – Vimal

Verwandte Themen