我在做一个触发器,使用的是后触发模式,这样的话我怎么样可以拿到我自已插入的新行(这个表中无标识列,不能用某个ID值去取)

解决方案 »

  1.   

    这样可以删掉吗???
    create or replace trigger Trig_Input_tb_SendSH
    after insert On tb_SendSH
    for each row
    declare
      inta number(5);
    begin
        SELECT count(*) 
        into inta
        FROM tb_SimNumber 
        where tb_SimNumber.TEL = :new.TEL;    if inta = 0 then
           
        dbms_output.put_line('tb_sendsjz');            insert into tb_SendSjz            (SC_TIME,TC_TIME,Tel,command,trans,sc_id,g2t_sq,t2m_sq,retry) 
                values(
                    :new.SC_TIME,:new.TC_TIME,:new.Tel,:new.command,
                    :new.trans,:new.sc_id,:new.g2t_sq,:new.t2m_sq,:new.retry);    else'我想在这里删掉,可是也会出错 delete tb_sendsh where sc_time=:new.SC_TIME and tc_time=:new.TC_TIME and 
    tel=:new.Tel and command=:new.command and 
                     trans=:new.trans and sc_id=:new.sc_id and g2t_sq=:new.g2t_sq and 
    t2m_sq=:new.t2m_sq and retry=:new.retry;
    null;    end if;
    end;
      

  2.   

    在这里会报出以下的错误:
     insert into tb_sendsh values('01-dec-98','01-dec-98','12345','123456789',1,2,3,4,5)
                 *
    第 1 行出现错误:
    ORA-04091: 表 SYSTEM.TB_SENDSH 发生了变化, 触发器/函数不能读它
    ORA-06512: 在 "SYSTEM.TRIG_INPUT_TB_SENDSH", line 22
    ORA-04088: 触发器 'SYSTEM.TRIG_INPUT_TB_SENDSH' 执行过程中出错
      

  3.   

    这个是逻辑问题了。
    你新插入一条数据,并且还没提交,这时怎么能通过触发器又去对这条数据delete呢?
      

  4.   

    如果LZ的意思是想对新插入的数据行进行判断,如果不合规则,就不让这个新行插入。那你只有在触发器中判断条件后抛出异常,不让它插入。或者是用VIEW加instead of触发器来实现这个要求。
      

  5.   

    create or replace trigger Trig_Input_tb_SendSH 
    after insert On tb_SendSH 
    for each row 
    declare 
      inta number(5); 
    begin 
        SELECT count(*) 
        into inta 
        FROM tb_SimNumber 
        where tb_SimNumber.TEL = :new.TEL;     if inta > 0 then 
          RAISE_APPLICATION_ERROR(-20005, 'The Sim Card Number is already existing');
        end if;
    end;