2014-11-24 73 views
0

這是我第一個問題,我在這裏是新的,所以我希望我在正確的主題問好...等 我試着用觸發器從一個表中捕獲信息,比較來自該表的一些數據,並且如果條件爲真,那麼觸發器必須存儲改變一些值的信息。有我的表和觸發器。我需要這個觸發器來存儲更大的表格,並且有很多列和更多的信息,但這只是一個測試,請幫助! :'(PL/SQL觸發器格式信息編譯錯誤

create table datos_prueba(
nombre varchar2(10) primary key, 
numero number(3), 
mensaje varchar(30), 
fecha date); 

create table store_datos_prueba(
nombre varchar(20) primary key, 
numero number(5), 
mensaje varchar(30), 
fecha date); 

這是扳機,我又寫道,但它是錯的......

create or replace trigger tgr_trigger_prueba 
    after insert on datos_prueba 
    for each row 
declare 
    cambio_numero number; 
begin 
    if :datos_prueba.numero <= 5 then 
     insert into store_datos_prueba (nombre,numero,mensaje,fecha) values(:datos_prueba.nombre,666,:datos_prueba.mensaje,:datos_prueba.fecha); 
    else 
     insert into store_datos_prueba (nombre,numero,mensaje,fecha) values(:datos_prueba.nombre,777,:datos_prueba.mensaje,:datos_prueba.fecha); 
    end if; 
end; 

回答

1

你必須使用oldnew指的值不表。名。

create or replace trigger tgr_trigger_prueba 
     after insert on datos_prueba 
     for each row 
    declare 
     cambio_numero number; 
    begin 
     if :new.numero <= 5 then 
      insert into store_datos_prueba (nombre,numero,mensaje,fecha) values(:new.nombre,666,:new.mensaje,:new.fecha); 
     else 
      insert into store_datos_prueba (nombre,numero,mensaje,fecha) values(:new.nombre,777,:new.mensaje,:new.fecha); 
     end if; 
    end; 
    /

More on Triggers

+1

':old'將爲插入返回NULL。我認爲你的意思是':新'。 – 2014-11-25 01:40:13

+0

@ maheswaran-revisankar酷男!非常感謝你,它完美的工作:) – 2014-11-25 16:10:59