Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle APEX Database Trigger – Probleme beim Verweisen auf Datenbankspalten

Sie können String-Matching durchführen, um jede Zeile zu testen:

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;

Also zum Beispiel, wenn ORDER_PARTS_LIST '123:456:789' ist , findet INSTR Übereinstimmungen für die IDs 123, 456 und 789, aber beispielsweise nicht für 124, 45 oder 8.

Wenn Teile aus einer Bestellung entfernt werden, benötigen Sie einen anderen Trigger als NULL die entsprechenden Felder in 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;