Сервер базы данных: Oracle 11g
Мне нужна помощь, чтобы узнать, как я буду получать информацию из двух таблиц в таблицу аудита с использованием триггера .
У меня есть две таблицы, которые имеют отношение 1-ко-многим .
Родительская таблица:
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), у меня возникает нарушение ограничения, что столбцы в родительской таблице должны быть не нулевыми.
Можно ли как-нибудь вставить данные в таблицу аудита? Пожалуйста, дайте мне немного света. Я пытался найти, но не смог найти решение. Спасибо.