我希望在插入类似名称
后,在表员工中增加 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
答案 0 :(得分:0)
以下是您不应在触发器中执行的简要列表(来源link此处,我个人最喜欢的页面):
在插入触发器上没有:OLD值。
关于删除触发器没有:新值。
触发器不提交事务。如果事务被回滚, 触发器更改的数据也会回滚。
触发器中不允许提交,回滚和保存点 身体。提交/回滚会影响整个事务,它是全部或 无。
触发器中未处理的异常将导致回滚 整个交易,而不仅仅是触发器。
如果在某个事件上定义了多个触发器,则按顺序执行 他们开火没有定义。如果触发器必须按顺序触发,你就是 必须创建一个触发器来执行所需的所有操作 顺序。
触发器可以导致其他事件执行触发器。触发器可以是 不要更改它已读取的表。这是变异表 错误问题。
我故意不粘贴该链接的最后一部分,因为它提到了诸如&#34;如何在触发器中提交的内容&#34;因为它是一种不好的做法,尽管它实际上是一种解决方法。但是,如果您无法避免这种情况,那么解决方案或实施的设计就会出现问题,这需要先解决。
干杯