Vous pouvez effectuer une correspondance de chaînes pour tester chaque ligne :
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;
Ainsi, par exemple, si ORDER_PARTS_LIST est '123:456:789'
, l'INSTR trouvera des correspondances pour les identifiants 123, 456 et 789, mais pas 124, 45 ou 8, par exemple.
Lorsque des pièces sont supprimées d'une commande, vous aurez besoin d'un déclencheur différent de NULL
les champs appropriés dans 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;