2016-09-26 1 views
-2

Erstellen einer Identitätsspalte mithilfe von Sequenzen und Triggern. Aber nicht um das Skript auszuführen wegen fehlenden Semikolon am EndePLS-00103: Das Symbol "Dateiende" wurde gefunden, wenn eines der folgenden Ereignisse erwartet wird:;

create table slide1 (id number(10), 
subject varchar2(25),constraint pk_id PRIMARY KEY(id) 
); 

Create sequence slide1_sequence start with 1 
increment by 1 
minvalue 1 
maxvalue 10000; 

create sequence id_seq; 

CREATE OR REPLACE TRIGGER slide1_trigger 
BEFORE INSERT ON slide1 
FOR EACH ROw 

BEGIN 
    SELECT slide1_seq.NEXTVAL 
    INTO :new.id 
    FROM dual 
close slide1; 
END; 
+1

Was bedeutet 'schließen slide1' tun? – Thilo

+0

Ihnen fehlt ein Semikolon nach der 'create table' Anweisung; Sie erstellen zwei Sequenzen, aber verwenden Sie die Sequenz 'slide1_sequence', die Sie nie erstellt haben; der 'close slide1' Teil ist mir unbekannt – Aleksej

+1

Sie vermissen ein'/'nach dem' create trigger': http://stackoverflow.com/a/10207695/330315 Und der Trigger ist unnötig kompliziert. ': new.id: = slide1_seq.NEXTVAL;' wird gut gehen. Kein Bedarf für ein 'select' und das' close' Teil ist falsch, wie Aleksej darauf hingewiesen hat. –

Antwort

1
SQL> create table slide1 (id number(10),subject varchar2(25),constraint pk_id PRIMARY KEY(id)); 
    Table created 

    SQL> Create sequence slide1_sequence start with 1 increment by 1 minvalue 1 maxvalue 10000; 
    Sequence created 

SQL> create sequence id_seq; 
Sequence created 

    SQL> CREATE OR REPLACE TRIGGER slide1_trigger 
     2 BEFORE INSERT ON slide1 
     3 FOR EACH ROw 
     4 
     5 BEGIN 
     6 SELECT slide1_sequence.NEXTVAL 
     7 INTO :new.id 
     8 FROM dual; 
     9 END; 
    10 
    11/
    Trigger created 
+0

Oder einfach ': new.id: = slide1_sequence.NEXTVAL;' (Weniger ist mehr.) –

Verwandte Themen