在插入/更新之前触发从层次结构的顶部获取值

时间:2018-03-05 11:24:54

标签: sql oracle plsql database-trigger

我正在使用Oracle 11。

我必须执行一个触发器,从PARENT_ID的VALUE -column中获取值并将其放在同一个表中的CHILD_ID的VALUE列中。

LEVEL  CHILD_ID   PARENT_ID   VALUE(of PARENT_ID) VALUE(of CHILD_ID)
10     07615461   09479551    111                 'null'  should have 111 from parent_id
20     07776685   07615461    111                 'null'  should have 111 from parent_id
20     08195786   07615461    111                 'null'  should have 111 from parent_id

因此,对触发器的查询必须按层次进行,但我不知道语法实际上是如何进行的。

我尝试过这样的事但没有成功

CREATE OR REPLACE TRIGGER value_check

BEFORE INSERT OR UPDATE ON table.a

   FOR EACH ROW                             

     BEGIN                                  

      IF :new.VALUE is NULL then            

       :new.VALUE := select b.VALUE,          

       connect_by_root(a.child_id)           

       from table a join table b              

       on a.child_id = b.child_id              

       connect by prior a.child_id = a.parent_id   

       start with a.level = 10;                    

      END IF;                                     

    END;                                        

非常感谢您的努力,帮助,提示,技巧,一切

也许我不够清楚,所以再试一次......

我需要一个触发器,它从层次结构中最高的ID(级别10)检查VALUE,并将此VALUE复制到它下面的每个其他ID。 例如,如果级别10中的ID 07615461具有VALUE 111,则应将此VALUE复制到07615461以下的每个其他ID。 例如,ID 07776685(在20级)和ID 08195786(在20级),每个应该具有与ID 07615461在10级中相同的VALUE 111。 这有意义吗? 我的矩阵可能不够好,这是另一种尝试:

目前: LEVEL CHILD_ID PARENT_ID VALUE 10 07615461 09479551 111 20 07776685 07615461 null 20 08195786 07615461 null 触发后: LEVEL CHILD_ID PARENT_ID VALUE 10 07615461 09479551 111 20 07776685 07615461 111 20 08195786 07615461 111

0 个答案:

没有答案