在行级触发器中作一些判断,如果符合某些条件,就放弃插入当前行
:new = null ?

解决方案 »

  1.   

    用异常才行吧,如果符合某些条件就抛出异常
    raise_application_error
      

  2.   

    触发器中when子句
    create or replace trigger trg_emp
    before insert on emp
    for each row
    when(new.empno is null)  --添加你触发器满足的条件
    begin
        raise_application_error(-20001,'empno is null!');
    end;
      

  3.   

    这个是for each row,但是实际试了一下,只要有一行出错了,就会导致其他行也都失败,都会一起回滚。我说的是想 放弃插入当前行
    有没有真的只针对each row,如果符合某些条件就只放弃当前行, 但是不影响其他正常数据行的方法呢?
      

  4.   

    触发器抛异常然后在插入的时候,嵌套一层create or replace trigger tri_test1
      before insert on test1  
      for each row
    declare
        int_count             number;
      -- local variables here
    begin
        if (mod(:new.id, 5) = 0) then
            raise_application_error(-20001,'error');
        end if;
        
    end tri_test1;
    /
    begin
        for i in 1..10
        loop
            begin
                insert into test1 values(i);
            exception
                when others then
                    null;
            end;
        end loop;
        commit;
    end;
    /
    select * from test1;
            ID
    ----------
             1
             2
             3
             4
             6
             7
             8
             9
     
    8 rows selected