Можете да направите съпоставяне на низове, за да тествате всеки ред:
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;
Така например, ако ORDER_PARTS_LIST е '123:456:789'
, INSTR ще намери съвпадения за идентификатори 123, 456 и 789, но не и 124, 45 или 8, например.
Когато части се премахнат от поръчка, ще ви е необходим различен тригер за NULL
съответните полета в 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;