Du kan lave strengmatchning for at teste hver række:
create or replace trigger "ORDER_PARTS_T1"
BEFORE
insert or update on "ORDER_TABLE"
for each row
begin
update PARTS_TABLE p
set p.ASSIGNED_ORDER_NUMBER = :new.ORDER_NUMBER
where instr(':' || :new.ORDER_PARTS_LIST || ':'
,':' || p.PART_NUMBER || ':') > 0;
end;
Så for eksempel, hvis ORDER_PARTS_LIST er '123:456:789'
, vil INSTR finde matcher for id'erne 123, 456 og 789, men f.eks. ikke 124, 45 eller 8.
Når dele fjernes fra en ordre, skal du bruge en anden trigger til NULL
de relevante felter i PARTS_TABLE
:
create or replace trigger "ORDER_PARTS_T1"
BEFORE
update on "ORDER_TABLE"
for each row
begin
update PARTS_TABLE p
set p.ASSIGNED_ORDER_NUMBER = NULL
where instr(':' || :new.ORDER_PARTS_LIST || ':'
,':' || p.PART_NUMBER || ':') = 0
and instr(':' || :old.ORDER_PARTS_LIST || ':'
,':' || p.PART_NUMBER || ':') > 0;
end;