Oracle
 sql >> Database >  >> RDS >> Oracle

Incremento automatico in Oracle con seq e trigger - istruzione sql non valida

Sospetto che il problema sia che lo strumento client sta leggendo ogni punto e virgola come fine di un comando, causando la trasmissione errata al server del codice PL/SQL (che richiede punti e virgola come terminatori di istruzioni).

Quando si rimuove il punto e virgola, l'istruzione viene inviata correttamente al server, ma si ottiene un oggetto non valido perché PL/SQL non è corretto.

Ho duplicato il tuo problema su SQL Fiddle. Quindi cambio il terminatore dell'istruzione in / invece di ; e modificato il codice per utilizzare una barra per eseguire ogni istruzione, e ha funzionato senza errori:

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;
/