视图v_emp_dept是连接员工表emp 和部门表dept生成的,现在创建一个替代触发器如下:
SQL>   create or replace trigger tr_v_e_d
  2    instead of insert on v_emp_dept
  3    for each row
  4    begin
  5    insert into dept(deptno,dname) values(:new.deptno,:new.dname);
  6  insert into emp(empno,ename,deptno) values(:new.empno,:new.ename,:new.deptn
o);
  7  end;
  8  /触发器已创建,这一步没有问题,可是接下来往视图中插入数据的时候出错了:
insert into v_emp_dept values ('456','Jack','30','SALES');
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_DEPT)ORA-06512: 在"SCOTT.TR_V_E_D", line 2
ORA-04088: 触发器 'SCOTT.TR_V_E_D' 执行过程中出错
我想:出错的原因可能是因为部门编号30,部门名称为SALES的记录已经在dept表中存在了。
所以就换了一条插入数据:SQL>  insert into v_emp_dept values ('456','Jack','90','Management');
可是,还是出错了,错误提示如下:
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)ORA-06512: 在"SCOTT.INSERT_DEPT", line 2
ORA-04088: 触发器 'SCOTT.INSERT_DEPT' 执行过程中出错
ORA-06512: 在"SCOTT.TR_V_E_D", line 2
ORA-04088: 触发器 'SCOTT.TR_V_E_D' 执行过程中出错
但是,插入数据前,编号为456的员工Jack根本就没在emp表中,编号为90的部门Management也没在dept表中。
怎么会出现违反唯一约束条件的错误呢???
请各位大虾帮我看看,谢谢~~~

解决方案 »

  1.   

    你自己insert一次,触发器帮你insert一次?
    你的本意是?
      

  2.   

    我用的是替代触发器,写insert语句时,就会激活触发器,当然只insert一次了。但是关键是出错提示是: 违反唯一约束条件, 可是在插入前,原表中根本就没有这条记录。执行insert后,出错,违反唯一约束条件。不知道哪里错了??