sql >> Base de Datos >  >> RDS >> Oracle

Incremento automático en Oracle con seq y disparador - declaración sql no válida

Sospecho que el problema es que su herramienta de cliente lee cada punto y coma como el final de un comando, lo que provoca que el código PL/SQL (que requiere puntos y comas como terminadores de instrucciones) se transmita incorrectamente al servidor.

Cuando elimina el punto y coma, la declaración se envía correctamente al servidor, pero termina con un objeto no válido porque el PL/SQL es incorrecto.

Dupliqué tu problema en SQL Fiddle. Luego cambio el terminador de declaración a / en lugar de ; y cambié el código para usar una barra inclinada para ejecutar cada declaración, y funcionó sin error:

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