sql >> Databasteknik >  >> RDS >> Oracle

Autoinkrement i oracle med seq och trigger - ogiltig SQL-sats

Jag misstänker att problemet är att ditt klientverktyg läser varje semikolon som slutet på ett kommando, vilket gör att PL/SQL-kod (som kräver semikolon som satsterminatorer) sänds felaktigt till servern.

När du tar bort semikolon skickas satsen korrekt till servern, men du får ett ogiltigt objekt eftersom PL/SQL är felaktig.

Jag duplicerade ditt problem på SQL Fiddle. Sedan ändrar jag satsterminatorn till / istället för ; och ändrade koden för att använda ett snedstreck för att köra varje sats, och det fungerade utan fel:

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. pg_dump postgres-databas från fjärrserver när port 5432 är blockerad

  2. Efterstående noll

  3. Hur skapar jag en dynamisk WHERE-sats?

  4. Använda intervall i PostgreSQL med Ruby on Rails