如何使用oracle中的触发器从另外两个表中插入一个表中的数据

Posted

技术标签:

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

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

【问题讨论】:

创建两个触发器,一个在 table_1 上,另一个在 table_2 上。 并应用相同的逻辑,只是表名会不同 您能否澄清您的问题,因为您只想在两个基础表中同时插入相同数据时插入 ADMIN 表? 【参考方案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

以上是关于如何使用oracle中的触发器从另外两个表中插入一个表中的数据的主要内容,如果未能解决你的问题,请参考以下文章

如何将触发器“如果插入”从oracle转换为mysql

如何在 SQL 中对触发器进行语法化,以便在插入后从同一个表中更新列(oracle 数据库)

使用触发器删除 Oracle 表中的行

java 如何通过接口把远程Oracle表中的数据同步到Mysql

如何使用触发器在同一张表中插入新行(Oracle PL/SQL 10G)?

Oracle触发器修改数据时同步执行插入该条数据