sql >> Base de Datos >  >> RDS >> Oracle

Desencadenador de la base de datos Oracle APEX:problemas con las columnas de la base de datos de referencia

Puede hacer coincidencias de cadenas para probar cada fila:

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;

Entonces, por ejemplo, si ORDER_PARTS_LIST es '123:456:789' , INSTR encontrará coincidencias para los ID 123, 456 y 789, pero no para 124, 45 u 8, por ejemplo.

Cuando se eliminen piezas de un pedido, necesitará un disparador diferente a NULL los campos apropiados en 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;