触发器将同一行复制到另一个表中

Posted

技术标签:

【中文标题】触发器将同一行复制到另一个表中【英文标题】:Trigger to copy the same row into another table 【发布时间】:2021-07-14 16:03:27 【问题描述】:

如何获取表 1 到表 2 中的值;这将根据 Table1 的列(订单)复制行

表1:

ID       TICKETID USERNAME FIRSTNAME LASTNAME ORDERS STATUS
SEL00007            Hema1     Hema    Sri       3      New
SEL00008            Romi1     Romi     T        2      New

表2:

ID       TICKETID USERNAME FIRSTNAME LASTNAME ORDERS STATUS
SEL00007            Hema1     Hema    Sri       3      New
SEL00007            Hema1     Hema    Sri       3      New
SEL00007            Hema1     Hema    Sri       3      New
SEL00008            Romi1     Romi     T        2      New
SEL00008            Romi1     Romi     T        2      New

这是我参考了很多其他帖子后才想到的

CREATE OR REPLACE TRIGGER Duplicate_Rows
AFTER INSERT OR UPDATE ON Table1
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE N_Ord NUMBER;
BEGIN
N_Ord := (SELECT (Orders) from Table2);
INSERT INTO UserTable2 (TICKETID,username,firstName,lastName,Status)
SELECT :New.TICKETID,:New.username,:New.firstName,:New.lastName,:New.Status
FROM dual
CONNECT BY LEVEL <= N_Ord; 
END Duplicate_Rows;
/

请帮忙!!

【问题讨论】:

【参考方案1】:

关闭;无需单独选择orders 进入变量;无论如何它都会失败,因为表正在变异,所以触发器看不到它。

触发器:

SQL> CREATE OR REPLACE TRIGGER trg_ai_t1 AFTER
  2    INSERT ON table1
  3    FOR EACH ROW
  4  BEGIN
  5    INSERT INTO table2(
  6      id,
  7      ticketid,
  8      username,
  9      firstname,
 10      lastname,
 11      orders,
 12      status
 13    )
 14      SELECT :new.id,
 15             :new.ticketid,
 16             :new.username,
 17             :new.firstname,
 18             :new.lastname,
 19             :new.orders,
 20             :new.status
 21      FROM dual CONNECT BY
 22        level <= :new.orders;
 23
 24  END;
 25  /

Trigger created.

插入table1:

SQL> INSERT INTO table1(
  2    id,
  3    ticketid,
  4    username,
  5    firstname,
  6    lastname,
  7    orders,
  8    status
  9  )VALUES(
 10    'SEL00007',
 11    NULL,
 12    'Hema1',
 13    'Hema',
 14    'Sri',
 15    3,
 16    'New'
 17  );

1 row created.

结果:

SQL> SELECT *
  2  FROM table1;

ID           TICKETID USERNAME   FIRST LASTN     ORDERS STATU
---------- ---------- ---------- ----- ----- ---------- -----
SEL00007              Hema1      Hema  Sri            3 New

SQL> SELECT *
  2  FROM table2;

ID           TICKETID USERNAME   FIRST LASTN     ORDERS STATU
---------- ---------- ---------- ----- ----- ---------- -----
SEL00007              Hema1      Hema  Sri            3 New
SEL00007              Hema1      Hema  Sri            3 New
SEL00007              Hema1      Hema  Sri            3 New

SQL>

【讨论】:

非常感谢,@Littlefoot!它按预期工作....我已经做了一个多小时了。 :|

以上是关于触发器将同一行复制到另一个表中的主要内容,如果未能解决你的问题,请参考以下文章

将触发器从一个数据库复制到另一个

调用触发器时将行从一个表复制到另一个表

建立 SQLSERVER 触发器 在一个服务器上的数据库中插入数据时同时插入到另一个服务器上的数据库的表中

Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列

在更新前使用触发器将一行插入到我的第二个表中

创建 Oracle SQL 触发器错误