2012-04-05 17 views
0

我有兩個表創建INSERT觸發器通過從其它表中獲取值更新記錄之後:的Oracle 11g

Parent(id, name, occupation) 

Child(id, name, gender,parent_id, parent_name, parent_occupation) 

我們插入孩子值我要跑卡查詢

insert into Child(id,name,gender,parent_id) values(10,'XYZ','Male',15); 

所以現在我的要求是執行此插入查詢時,觸發器將運行並從父表中爲id 15(Child記錄的parent_id)獲取名稱和職業,並分別將其添加到新插入的行中的parent_name和parent_occupation字段中。

我使用oracle 11g作爲我的數據庫。如果有任何人有這個答案,請幫助我。 真的很緊急。

+2

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – Ben 2012-04-05 08:38:13

+0

的PARENT_NAME和parent_occupation是父母的屬性,他們屬於父表,而不是子女。 – 2012-04-05 10:39:23

+0

@MatthewWatson,他們已經在'PARENT'表中。由於兩個表通過「CHILD.PARENT_ID」鏈接,「CHILD」表中的兩列是多餘的。我同意OP需要審查他們的模式設計! – Ollie 2012-04-05 12:21:15

回答

2

你想要的東西類似這樣(雖然你將需要添加代碼來處理異常):

CREATE OR REPLACE 
TRIGGER ai_child_tg 
AFTER INSERT ON child 
REFERENCING NEW AS NEW OLD AS OLD 
FOR EACH ROW 
BEGIN 
    SELECT name, 
      occupation 
    INTO :NEW.parent_name, 
      :NEW.parent_occupation 
    FROM parent 
    WHERE id = :NEW.parent_id; 
EXCEPTION 
    WHEN no_data_found 
    THEN 
     <handle_your_exception_> 
END ai_child_tg; 

但是,如果你的CHILD表確實是一個關係到孩子的PARENT桌旁,是FK關係(通過CHILD.PARENT_ID列),然後在CHILD表中存儲PARENT_NAMEPARENT_OCCUPATION列在邏輯上是冗餘的。

我想查詢爲什麼你在CHILD表中有這兩列。

希望它可以幫助...

相關問題