2009-07-21 8 views
0

Ergebnis dieser Abfrage 22 Ie kann Lets betrachten. (Wählen Sie max (screen_id) +1 von table_screen) = 22Ich möchte das Abfrageergebnis setzen, wie minvalue

create sequence SEQ_TEST 
minvalue SELECT MAX(SCREEN_ID)+1 FROM TABLE_SCREEN 
start with 25 
maxvalue 999999999999999999999999999 
increment by 1 
nocache; 

Wie das Ergebnis einstellen einer Abfrage auf einen minvalue in Folge ??

+0

König, mit ALLEN GROSSBUCHSTABEN gilt als unhöflich. Ich habe deinen Beitrag hier korrigiert, aber bitte vermeide ihn in Zukunft. –

Antwort

1

könnten Sie dynamische SQL wie folgt verwenden:

Edit: jetzt getesteten Code

--Test setup 
create table table_screen (screen_id INTEGER NOT NULL); 
/
insert into table_screen values (1); 
/
insert into table_screen values (10); 
/
insert into table_screen values (21); 

neuen Block

DECLARE 
    MinVal   INTEGER; 
BEGIN 
    SELECT MAX(SCREEN_ID)+1 INTO MinVal FROM table_screen; 

    EXECUTE IMMEDIATE 'CREATE SEQUENCE seq_test START WITH ' || MinVal; 
END; 
/

ich die zusätzlichen Parameter entfernt, nur um es klein zu halten.

Beachten Sie auch, dass MINVALUE verwendet wird, wenn das Inkrement negativ ist, entsprechend meinem Favoriten Oracle help guy, also tausche ich den Code mit START WITH anstatt mit einem positiven Inkrement.

+0

danke für Ihre Antwort .. Aber ich muss die Select-Abfrage innerhalb der Create-Sequenz verwenden .. wie kann ich ?? –

+0

Warum im Befehl Sequenz erstellen? Wie läuft der Befehl, der diesen anonymen Block nicht haben kann? –

+0

@king: Dies ist einfach die Art, wie dies gemacht wird. Die CREATE SEQUENCE-Anweisung unterstützt keine Unterabfragen. START WITH, MINVALUE usw. erfordern alle Ganzzahlen. Es gibt nicht viel Anruf für etwas anderes, wirklich. –

Verwandte Themen