【问题标题】:How to insert data in one table from another two tables using triggers in oracle如何使用oracle中的触发器从另外两个表中插入一个表中的数据
【发布时间】:2015-10-07 06:01:29
【问题描述】:

当数据插入另外两个表(即 table_1 和 table_2 )时,我一直试图在表中动态插入数据,比如 admin 。我只能为一个表而不是多个表获得所需的输出。我如何通过在 oracle 中使用触发器来实现这一点?

【问题讨论】:

  • 创建两个触发器,一个在 table_1 上,另一个在 table_2 上。
  • 并应用相同的逻辑,只是表名会不同
  • 您能否澄清您的问题,因为您只想在两个基础表中同时插入相同数据时插入 ADMIN 表?

标签: oracle plsql database-trigger


【解决方案1】:

您需要创建两个单独的INSERT 触发器,一个在table_1 上,另一个在table_2 上,以将数据插入admin 表中。

触发器 1:

CREATE OR REPLACE TRIGGER table_1_after_insert
AFTER INSERT
   ON table_1
   FOR EACH ROW  
BEGIN

   -- Insert record into admin table
   INSERT INTO admin
   ( column1,
     column2,
     column3,
     column4,
     column5 )
   VALUES
   ( :new.column1,
     :new.column2,
     :new.column3,
     :new.column4,
     :new.column5 );

END;
/

触发器 2:

CREATE OR REPLACE TRIGGER table_2_after_insert
AFTER INSERT
   ON table_2
   FOR EACH ROW  
BEGIN

   -- Insert record into admin table
   INSERT INTO admin
   ( column1,
     column2,
     column3,
     column4,
     column5 )
   VALUES
   ( :new.column1,
     :new.column2,
     :new.column3,
     :new.column4,
     :new.column5 );

END;
/

【讨论】:

    【解决方案2】:

    按照 lalit 的建议在 2 个表上创建 2 个触发器

        CREATE or replace TRIGGER TRG_TAB1
              BEFORE INSERT ON tab1...
    
    ... insert into admin (name) values (:new.name) 
    

    在另一张桌子上

        CREATE or replace TRIGGER TRG_TAB2
              BEFORE INSERT ON tab2...
    ... insert into admin (name) values (:new.name) 
    

    【讨论】:

    • 我猜表名应该不一样??
    • OP 想要它的另一种方式,在 table_1 和 table_2 上触发以将数据插入到管理员中。
    • @Moudiz new.name 将失败,新的应引用为 :new
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2011-06-24
    相关资源
    最近更新 更多