Вставка триггера SQL - PullRequest
0 голосов
/ 28 июня 2018

Мне нужно вставить значения NRO_BOLETA, MONTO_BOLETA * 0,15 (VALOR_COMISION в таблице COMISION_VENTA) в таблицу COMISION_VENTA, когда в базу данных вставляется новая BOLETA

БОЛЕТА стол:

CREATE TABLE BOLETA 
(
      nro_boleta NUMBER(10) CONSTRAINT PK_BOLETA PRIMARY KEY, 
      fecha_boleta DATE  NOT NULL, 
      monto_boleta NUMBER(15)  NOT NULL, 
      id_cliente NUMBER(10) NOT NULL,
      numrut_emp NUMBER(10) NOT NULL,

      CONSTRAINT FK_FACTURA_VENDEDOR 
          FOREIGN KEY(numrut_emp) REFERENCES empleado(numrut_emp)
); 

Таблица COMISION_VENTA:

CREATE TABLE COMISION_VENTA
(
      nro_boleta NUMBER(10) NOT NULL CONSTRAINT PK_COMISION_VENTA PRIMARY KEY ,
      valor_comision  NUMBER(10) NOT NULL,

      CONSTRAINT FK_COMISION_VENTA_BOLETA 
          FOREIGN KEY(nro_boleta) REFERENCES BOLETA(nro_boleta)
);

Trigger:

CREATE OR REPLACE TRIGGER asignacion
BEFORE INSERT OR DELETE OR UPDATE ON BOLETA
FOR EACH ROW
BEGIN
    IF INSERTING THEN
        INSERT INTO COMISION_VENTA(NRO_BOLETA, VALOR_COMISION) 
        VALUES(:NEW.NRO_BOLETA, ROUND(:NEW.MONTO_BOLETA*0,15));
    END IF;
END;

Вставка и ошибка:

INSERT INTO BOLETA(NRO_BOLETA, FECHA_BOLETA, MONTO_BOLETA, ID_CLIENTE, NUMRUT_EMP)
VALUES (28, '26/06/18', 258999, 3000, 12456905)

Информационная ошибка
ORA-02291: ограничение целостности (ADMIN_ENS.FK_COMISION_VENTA_BOLETA) нарушено - родительский ключ не найден
ORA-06512: по адресу "ADMIN_ENS.ASIGNACION", строка 3
ORA-04088: ошибка во время выполнения триггера 'ADMIN_ENS.ASIGNACION'

1 Ответ

0 голосов
/ 28 июня 2018

Обновите код триггера, чтобы он стал ПОСЛЕ ТРИГГЕРА -

CREATE OR REPLACE TRIGGER asignacion
**after** INSERT OR DELETE OR UPDATE ON BOLETA
FOR EACH ROW
BEGIN
    IF INSERTING THEN
        INSERT INTO COMISION_VENTA(NRO_BOLETA, VALOR_COMISION) 
        VALUES(:NEW.NRO_BOLETA, ROUND(:NEW.MONTO_BOLETA*0,15));
    END IF;
END;
/

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...