我想创建一个触发器,当某行数据的其中两列被更新为空时,就把该行数据删除。在SQL SERVER里这时很容易实现的。我写的触发器如下(该触发器没起作用):
create or replace trigger tr_deltemail
  after update on MAILSYSTEM
  for each rowbegin
  
  
  if :new.SENDERDIR='' and :new.DELETER='' then
  delete MAILSYSTEM where MAILSYSTEM.MAIL_ID=:old.MAIL_ID;
    end if;
end tr_deltemail;

解决方案 »

  1.   

    你的触发器有问题
    if :new.SENDERDIR='' and :new.DELETER='' then
    应该是
    if :new.SENDERDIR is null and :new.DELETER is null then
    而且这个触发器应该不能用,更新后已经把表锁住,查询都不行,更别说删除了
      

  2.   

    对,楼上说的没错,因为你update操作后表是锁定的,所以那个对自身表所建的触发器是处于不能读的状态,删除操作肯定是操作不了的!
      

  3.   

    可以用JOB通过定时扫描表数据变化来执行这个操作。
      

  4.   

    你要删除该行的话,把该行的所有字段值设为NULL,看行不行?
      

  5.   

    要用null来判断。
    oracle 是行级锁。按libin_ftsafe的试试吧
      

  6.   

    用行级的before触发器将需要删除的记录打上特殊标志。用表级的after触发器将有特殊标记的记录删除。