代码之家  ›  专栏  ›  技术社区  ›  Olahzzz

创建触发器,使其新数据插入到新表Oracle中

  •  1
  • Olahzzz  · 技术社区  · 6 年前

    数据库服务器:Oracle 11g

    我需要帮助我如何从2张表中获取信息 使用触发器审核表 .

    我有两张桌子 一对多关系 .

    父表:

       CREATE TABLE "CLIENT_DETAILS" ( 
              ID NUMBER(12) PRIMARY KEY NOT NULL ENABLE,
              FIRSTNAME VARCHAR2(20) NOT NULL,
              RATING NUMBER(3) NOT NULL,
              BIRTHDATE DATE NOT NULL
           );
    

    子表:

      CREATE TABLE "CLIENT_ORDERS" ( 
          ID NUMBER(12) PRIMARY KEY NOT NULL ENABLE,
          CLIENT_DETAILS_ID NUMBER(12) REFERENCES CLIENT_DETAILS(ID),
          REMARKS VARCHAR2(50) NOT NULL,
          DATE_TRANS TIMESTAMP NOT NULL
       );
    

    审计表:

     CREATE TABLE "CLIENT_ORDERS_AUDIT" ( 
              CLIENT_DETAILS_ID NUMBER(12) NOT NULL,
              FIRSTNAME VARCHAR2(20) NOT NULL,
              REMARKS VARCHAR2(50) NOT NULL,
              BIRTHDATE DATE NOT NULL,
              RATING VARCHR2(3) NOT NULL,
              DATE_TRANS TIMESTAMP NOT NULL
           );
    

    父触发器:

     CREATE OR REPLACE TRIGGER "CLIENT_DETAILS_TRG"
          BEFORE INSERT ON "CLIENT_DETAILS"
          FOR EACH ROW
          DECLARE
          v_user VARCHAR2(50);
    
     BEGIN
          IF INSERTING THEN
            INSERT INTO "CLIENT_ORDERS_AUDIT" 
            (ID, FIRSTNAME, REMARKS, BIRTHDATE, RATING, DATE_TRANS)
            VALUES (:NEW.ID, :NEW.FIRSTNAME, NEW:RATNG, :NEW.BIRTHDATE);
       END IF;
    END;
    /
    COMMIT;
    EXIT;
    

    子触发器:

     CREATE OR REPLACE TRIGGER "CLIENT_ORDERS_TRG"
          BEFORE INSERT ON "CLIENT_ORDERS"
          FOR EACH ROW
     DECLARE
          v_user VARCHAR2(50);
    
     BEGIN
          IF INSERTING THEN
            INSERT INTO "CLIENT_ORDERS_AUDIT" 
            (REMARKS, DATE_TRANS)
            VALUES (:NEW.REMARKS, :NEW.DATE_TRANS');
       END IF;
    END;
    /
    COMMIT;
    EXIT;
    

    审核表包含来自client_details和client_orders表的列。如何使用触发器将所有信息输入审核表?

    我最初做的是创建两个触发器。 当父表和子表中发生插入时,这两个触发器将数据插入到审核表中。但每次我将数据插入client_orders(child)表时,都会遇到一个约束冲突,即父表中的列不要求为空。

    我可以在审计表中插入数据吗?请给我点光。我试图寻找,但找不到解决办法。谢谢。

    0 回复  |  直到 6 年前