Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Autoincrement in Oracle mit seq und trigger - ungültige SQL-Anweisung

Ich vermute, dass das Problem darin besteht, dass Ihr Client-Tool jedes Semikolon als Ende eines Befehls liest, was dazu führt, dass PL/SQL-Code (der Semikolons als Abschlusszeichen für Anweisungen benötigt) falsch an den Server übertragen wird.

Wenn Sie das Semikolon entfernen, wird die Anweisung korrekt an den Server gesendet, aber Sie erhalten am Ende ein ungültiges Objekt, da PL/SQL falsch ist.

Ich habe Ihr Problem auf SQL Fiddle dupliziert. Dann ändere ich das Abschlusszeichen der Anweisung in / statt ; und den Code geändert, um einen Schrägstrich zu verwenden, um jede Anweisung auszuführen, und es funktionierte ohne Fehler:

CREATE TABLE proposals (
    proposal_id INT NOT NULL,
    target_audience VARCHAR2(50) NOT NULL,
    line_of_business VARCHAR2(50),
    activity_description VARCHAR2(250) NOT NULL,
    cost NUMBER(19, 4),
    comments VARCHAR2(250),
    objectives_and_results VARCHAR2(250),
    PRIMARY KEY (proposal_id)
)
/

CREATE SEQUENCE proposals_seq MINVALUE 1 
START WITH 1 INCREMENT BY 1 CACHE 10
/

CREATE OR REPLACE TRIGGER proposals_before_insert
BEFORE INSERT ON proposals FOR EACH ROW
BEGIN
    select proposals_seq.nextval into :new.proposal_id from dual;
END;
/