Я пытаюсь создать триггер, который после вставки обновляет столбец ID_TREE
в соответствии с некоторыми критериями:
Таблица DOD_CT_L
RID VARCHAR2(16) --PK
ID_TREE NUMBER(16)
FLAGS_S VARCHAR2(254)
DAT_OD DATE(7) --> FROM
DAT_DO DATE(7) --> TO
Таблица DOD_CT_O
RID_O NUMBER(16) --PK
ID_R NUMBER(16) --PK
KOD_ID NUMBER(22) --FK
RID_CT_O VARCHAR2(16)
Таблица CT_O
RID_OBJ VARCHAR2(16) --PK
KOD_ID NUMBER(22) --FK
S_STAMP VARCHAR(254)
TYP NUMBER (22)
NAVOZ_OD DATE(7) --> FROM
NAVOZ_DO DATE(7) --> TO
Итак, мне нужен триггер в таблице DOD_CT_L
, который обновит его и установит col ID_TREE
до 4401
или 4402
. Критерии для 4401
: элемент (kod_id
) и этот столбец: (DOD_CT_O.RID_CT_O
= CT_O.RID_OBJ
) должны совпадать. Если это правда, установите новое значение.
Attemtp:
CREATE OR REPLACE TRIGGER DOD_CT_L_TREE
AFTER INSERT OR UPDATE on DOD_CT_L
FOR EACH ROW
DECLARE
ct_count number(2)
when (new.FLAGS_S in (0,4) )
BEGIN
select 1 into ct_count from dod_ct_o o where o.rid_ct_o in (
select rid_obj from ct_o where kod_id = o.kod_id and s_stamp = '0' and typ in (10,11)
and ( dat_do Is Null Or dat_do >= trunc(Sysdate) ) group by rid_obj) group by 1;
:new.id_tree :=
CASE
WHEN :new.ct_count > 0 and (:new.NAVOZ_DO > trunc(sysdate) or :new.NAVOZ_DO is null)
then '4401'
WHEN :new.ct_count >= 0 and :new.NAVOZ_DO <= trunc(sysdate) then '4402'
END;
END;
/
Я еще не тестировал его, но похоже ли он на работоспособный? (Я так не думаю.)