Oracle
 sql >> Base de données >  >> RDS >> Oracle

Incrémentation automatique dans oracle avec seq et déclencheur - instruction sql non valide

Je soupçonne que le problème est que votre outil client lit chaque point-virgule comme la fin d'une commande, ce qui entraîne une transmission incorrecte du code PL/SQL (qui nécessite des points-virgules comme terminateurs d'instruction) au serveur.

Lorsque vous supprimez le point-virgule, l'instruction est correctement envoyée au serveur, mais vous vous retrouvez avec un objet invalide car le PL/SQL est incorrect.

J'ai dupliqué votre problème sur SQL Fiddle. Ensuite, je change le terminateur de déclaration en / au lieu de ; et changé le code pour utiliser une barre oblique pour exécuter chaque instruction, et cela a fonctionné sans erreur :

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