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

Autoincrement i oracle med seq og trigger - ugyldig sql-sætning

Jeg formoder, at problemet er, at dit klientværktøj læser hvert semikolon som slutningen af ​​en kommando, hvilket forårsager, at PL/SQL-kode (som kræver semikolon som sætningsterminatorer) bliver transmitteret forkert til serveren.

Når du fjerner semikolon, sendes sætningen korrekt til serveren, men du ender med et ugyldigt objekt, fordi PL/SQL er forkert.

Jeg har duplikeret dit problem på SQL Fiddle. Så ændrer jeg sætningsterminatoren til / i stedet for ; og ændrede koden til at bruge en skråstreg til at udføre hver sætning, og det fungerede uden fejl:

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


  1. MySQL pivottabel ved hjælp af java

  2. currval Funktion i PostgreSQL, der klager over, at kolonnen ikke eksisterer

  3. Sådan bruger du GROUP_CONCAT i en CONCAT i MySQL

  4. Indsættelse af data efter oprettelse af indeks på tom tabel eller oprettelse af unikt indeks efter indsættelse af data på oracle?