Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Acionador do banco de dados Oracle APEX - Problemas ao fazer referência às colunas do banco de dados


Você pode fazer a correspondência de strings para testar cada linha:
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;

Por exemplo, se ORDER_PARTS_LIST for '123:456:789' , o INSTR encontrará correspondências para os ids 123, 456 e 789, mas não 124, 45 ou 8, por exemplo.

Quando as peças são removidas de um pedido, você precisará de um gatilho diferente para NULL os campos apropriados em 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;