Oracle
 sql >> Base de données >  >> RDS >> Oracle

Déclencheur de base de données Oracle APEX - Problèmes de référencement des colonnes de la base de données

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;