Oracle
 sql >> Database >  >> RDS >> Oracle

Trigger del database Oracle APEX - Problemi con il riferimento alle colonne del database

Puoi eseguire la corrispondenza delle stringhe per testare ogni riga:

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;

Ad esempio, se ORDER_PARTS_LIST è '123:456:789' , INSTR troverà corrispondenze per gli ID 123, 456 e 789, ma non 124, 45 o 8, ad esempio.

Quando le parti vengono rimosse da un ordine, avrai bisogno di un trigger diverso da NULL i campi appropriati 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;