2010-08-11 4 views

Antwort

35

Der START MIT KLAUSEL eine ganze Zahl annimmt. Sie können die Anweisung "Sequenz erstellen" dynamisch erstellen und sie dann mit execute direkt ausführen, um dies zu erreichen.

declare 
    l_new_seq INTEGER; 
begin 
    select max(id) + 1 
    into l_new_seq 
    from test_table; 

    execute immediate 'Create sequence test_seq_2 
         start with ' || l_new_seq || 
         ' increment by 1'; 
end; 
/

Überprüfen Sie diese Links.

http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_6014.htm
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/executeimmediate_statement.htm

+2

ich ein kleines Problem hatte, wenn die Tabelle neu ist, weil "max (id)" null zurückgibt. Also musste ich die Auswahl ändern zu: "Wählen Sie nvl (max (id), 0) + 1" Vielleicht jemand anderes läuft auf das gleiche Problem – steven2308

-1

Hier habe ich mein Beispiel, das funktioniert gut:

declare 
ex number; 
begin 
    select MAX(MAX_FK_ID) + 1 into ex from TABLE; 
    If ex > 0 then 
    begin 
      execute immediate 'DROP SEQUENCE SQ_NAME'; 
     exception when others then 
     null; 
    end; 
    execute immediate 'CREATE SEQUENCE SQ_NAME INCREMENT BY 1 START WITH ' || ex || ' NOCYCLE CACHE 20 NOORDER'; 
    end if; 
end; 
Verwandte Themen