2011-06-22 88 views
4

自動修改日期我在Oracle中的表,我想學習上線更新甲骨文:在更新

id number, 
title varchar2(10), 
modify_date date 

我創建了一個觸發喂modify_date:

create or replace 
TRIGGER schema.name_of_trigger 
BEFORE UPDATE ON schema.name_of_table 
FOR EACH ROW 
BEGIN 
    :new.modify_date := sysdate; 
END; 

但當我從另一個表進行大更新時,我希望modify_date僅針對具有新值的行進行更新,而不是所有行。

update mytable a set title = (select title from mytable2 b where b.id = a.id) 

這可能嗎?我認爲甲骨文不會使用相同的值更新字段

感謝

回答

7

你以爲錯,甲骨文做了你命令它做什麼。

你可以試着

update mytable a set title = 
     (select title from mytable2 b 
     where b.id  = a.id and 
       b.title != a.title) 

或改變觸發專門檢查不同的標題名稱。

create or replace 
TRIGGER schema.name_of_trigger 
BEFORE UPDATE ON schema.name_of_table 
FOR EACH ROW 
BEGIN 
-- Check for modification of title: 
    if :new.title != :old.title then 
     :new.modify_date := sysdate; 
    end if; 
END; 
+0

以及如何告訴觸發器在值不同時不更新日期? – Fredv

+0

您可以在觸發器中將':new.title'與':old.title'進行比較。 –

+0

'!='不會捕獲空值。 –