2015-01-07 3 views
0

У меня есть запрос запуска,нулевые значения Insering в запускающей таблице

create or replace trigger trg_upd 
after update or delete or insert 
    on dept for each row 
declare 
--pragma autonomous_transaction; 
begin 
    if inserting then 
    insert into deptemp values(:old.deptno,:old.dname,:old.loc); 
    elsif updating then 
insert into deptemp values(:old.deptno,:old.dname,:old.loc); 
else 
insert into deptemp values(:old.deptno,:old.dname,:old.loc); 
end if; 
end trg_upd; 

и создал стол

create table deptemp as(select * from dept where 1=2); 

Когда я insering в таблице DEPT нулевых значения вставляют в таблице deptemp

insert into dept values(50,'OLTP','Hyd'); 

Выбрать * from deptemp;

DEPTNO DNAME   LOC                  
------ -------------- -------------                
    20 RESEARCH  DALLAS                  
    30 SALES   CHICAGO                 
    40 OPERATIONS  BOSTON                  

    50 OLTP   Hyd                  

    10 SALES   CHICAGO                 

Почему значения, вставленные в таблицы депонирования, вставляются в качестве нулевых значений таблицы deptemp?

+0

Поскольку вы используете «старые» значения, а для вставки не было «старых» значений, поэтому они равны нулю. Используйте «новое», если вы хотите новые значения. –

ответ

0

Как отметил Тони, в триггерах псевдонимы OLD будут иметь значение NULL в качестве значения when Inserting, потому что, очевидно, предыдущее значение записи равно NULL, когда вы пытаетесь вставить. Исправьте его использовать новый и она должна быть тонкой

create or replace trigger trg_upd 
after update or delete or insert 
    on dept for each row 
declare 
--pragma autonomous_transaction; 
begin 
    if inserting then 
    insert into deptemp values(:NEW.deptno,:NEW.dname,:NEW.loc); 
    elsif updating then 
insert into deptemp values(:old.deptno,:old.dname,:old.loc); 
else 
insert into deptemp values(:old.deptno,:old.dname,:old.loc); 
end if; 
end trg_upd; 

Кроме того, я действительно не знаю, почему вы делаете Вкладыш под ОБНОВЛЕНИЕМ/ELSE условия ветвления ...