当“插入”触发器触发后,表变异,我不知道该怎么做

时间:2017-11-06 07:06:50

标签: plsql

我希望在插入类似名称

后,在表员工中增加 samenameamount

我有这样一个触发器:

var a = prompt('Enter value');
if(+a > 10){
  alert('a > 10');
}
else if(a !== '' && +a < 10){
  alert('a < 10');
}
else if(+a === 10){
  alert('a === 10'); 
}
else{
  alert('Really, you should avoid using prompt and alert!');
}
// notice this is less code than that pointless switch
  

我的表格是

    create or replace trigger countNumbEmp after insert on employees for each row
declare
    var_count_names number;--var for count same names 
begin
    select count(emp_name) into var_count_names from employees where emp_name = :new.emp_name;
    update employees set samenameamount = var_count_names where emp_name = :new.emp_name;
end;

插入后我收到此消息:

 - Name           Null? Type         
-------------- ----- ------------ 
  EMP_ID               NUMBER       

  EMP_NAME             VARCHAR2(20) 

  SAMENAMEAMOUNT       NUMBER   

1 个答案:

答案 0 :(得分:0)

以下是您不应在触发器中执行的简要列表(来源link此处,我个人最喜欢的页面):

  • 在插入触发器上没有:OLD值。

  • 关于删除触发器没有:新值。

  • 触发器不提交事务。如果事务被回滚, 触发器更改的数据也会回滚。

  • 触发器中不允许提交,回滚和保存点 身体。提交/回滚会影响整个事务,它是全部或 无。

  • 触发器中未处理的异常将导致回滚 整个交易,而不仅仅是触发器。

  • 如果在某个事件上定义了多个触发器,则按顺序执行 他们开火没有定义。如果触发器必须按顺序触发,你就是 必须创建一个触发器来执行所需的所有操作 顺序。

  • 触发器可以导致其他事件执行触发器。触发器可以是 不要更改它已读取的表。这是变异表 错误问题。

我故意不粘贴该链接的最后一部分,因为它提到了诸如&#34;如何在触发器中提交的内容&#34;因为它是一种不好的做法,尽管它实际上是一种解决方法。但是,如果您无法避免这种情况,那么解决方案或实施的设计就会出现问题,这需要先解决。

干杯