SQL触发器插入

标签 sql oracle triggers

当新的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/

相关文章:

sql - 如何在没有已知列的情况下为 PostgreSQL View 编写通用更新触发器?

mysql - 超过 8 个表的特定汽车行业 SQL 查询(mysql)

java - 从 jdbc 执行 PLSQL 后读取 DBMS_Ouptut

oracle - 如何将列数据迁移到新的数据类型

oracle - oracle中的索引类型?

sql-server - 在 sql server 中使用 ON DELETE CASCADE 删除触发器问题

wpf - 如何使用触发器检查复选框?

sql-server,SQL 查询中的 IF 语句

java - 我无法在 netbeans 和 apache 服务器中使用 java 连接到远程数据库

sql - 函数返回表变量