【问题标题】: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;
/

请帮忙!!

【问题讨论】:

    标签: sql oracle triggers


    【解决方案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!它按预期工作....我已经做了一个多小时了。 :|
    猜你喜欢
    • 1970-01-01
    • 2018-01-10
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多