在插入触发器之后创建,通过从另一个表获取值来更新记录:Oracle 11g

时间:2012-04-05 08:29:10

标签: oracle triggers insert

我有两张桌子

Parent(id, name, occupation)

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

现在在子项中插入值我将运行chi查询

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

所以现在我的要求是当执行此插入查询时,将运行触发器并从父表中获取id 15的名称和占用(子记录的parent_id),并将其添加到字段parent_name和parent_occupation中新插入的行中

我使用oracle 11g作为我的数据库。如果有人有答案,请帮助我。 这真的很紧急。

1 个答案:

答案 0 :(得分: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列),则存储{{1 <{1}}表中的{}和PARENT_NAME列在逻辑上是多余的。

我会查询为什么你在PARENT_OCCUPATION表中有这两列。

希望它有所帮助...