首页 > 解决方案 > 创建将获取其新数据以插入新表 oracle 的触发器

问题描述

数据库服务器:Oracle 11g

我需要有关如何使用触发器将 2two 表中的信息获取到审计表中的帮助。

我有两个具有一对多关系的表。

父表:

   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;

Audit 表包含来自 CLIENT_DETAILS 和 CLIENT_ORDERS 表的组合列。如何使用触发器将所有信息输入到审计表中?

我最初所做的是创建两个触发器。当父子表中发生插入时,这两个触发器将数据插入到审计表中。但是每次我将数据插入 Client_Orders (子)表时,我都会遇到约束冲突,即父表中的列必须不为空。

无论如何我可以在审计表中插入数据吗?请给我一些光。我试图搜索,但找不到解决方案。谢谢。

标签: sqloracleoracle11gtriggers

解决方案


推荐阅读