Я работаю над системой для отслеживания истории проекта. Существуют три основные таблицы: проекты, задачи и клиенты, а затем три таблицы истории для каждого. У меня есть триггер по таблице проектов.Оракул и история создания
CREATE OR REPLACE TRIGGER mySchema.trg_projectHistory
BEFORE UPDATE OR DELETE
ON mySchema.projects REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
declare tmpVersion number;
BEGIN
select myPackage.GETPROJECTVERSION(:OLD.project_ID) into tmpVersion from dual;
INSERT INTO mySchema.projectHistiry
(project_ID, ..., version)
VALUES
(:OLD.project_ID,
...
tmpVersion
);
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END ;
/
У меня есть три триггера для каждой из моих таблиц (проекты, задачи, клиенты).
Задача: Не все меняется одновременно. Например, кто-то может просто обновить стоимость определенных задач. В этом случае срабатывает только один триггер, и у меня есть одна вставка. Я хотел бы вставить одну запись в 3 таблицы истории сразу, даже если ничего не изменилось в таблицах проектов и клиентов.
Кроме того, что, если кто-то изменит значение end_date проекта, стоимость и скажет, что выбирает другого клиента. Теперь у меня есть три срабатывания триггера одновременно. Только в этом случае у меня будет одна запись, вставленная в мои три таблицы истории. (который я хочу)
Если я изменяю триггеры для ввода в 3 таблицы для первого примера, тогда у меня будет 9 вставок, когда произойдет второй пример.
Не совсем уверен, как это решить. любая помощь?
true, но другой задачей, с которой я сталкиваюсь, теперь является история задач, но не история проекта/клиента. Мне нужно выяснить соединение: если в x_history ничего нет, то получите его от x. – CFNinja
Ну, в таком случае, можете ли вы попробовать иметь как активные, так и неактивные версии в таблице истории? Недостатком такого подхода было бы то, что после каждого обновления текущей записи в рабочей таблице вам нужно будет обновить последнюю запись в истории, а затем вставить новую запись. –
Таблицы истории содержат только неактивные версии. Любое обновление/удаление на любые основные таблицы создает неактивные версии истории. Как сделать последнее? Если в x_history ничего нет, перейдите к нему из x. – CFNinja