当新的BOLETA插入数据库时,我需要在COMISION_VENTA表中插入NRO_BOLETA,MONTO_BOLETA * 0,15(表COMISION_VENTA中的VALOR_COMISION)值
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)
);
触发器:
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)
Informe de error
ORA-02291: integrity constraint (ADMIN_ENS.FK_COMISION_VENTA_BOLETA) violated - parent key not found
ORA-06512: at "ADMIN_ENS.ASIGNACION", line 3
ORA-04088: error during execution of trigger 'ADMIN_ENS.ASIGNACION'
最佳答案
将您的触发代码更新为 AFTER TRIGGER -
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;
/
这应该有效。
关于SQL触发器插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51088272/