Bạn có thể thực hiện đối sánh chuỗi để kiểm tra từng hàng:
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;
Vì vậy, ví dụ:nếu ORDER_PARTS_LIST là '123:456:789'
, INSTR sẽ tìm các kết quả phù hợp cho các id 123, 456 và 789, nhưng không phải 124, 45 hoặc 8, chẳng hạn.
Khi các bộ phận bị xóa khỏi một đơn đặt hàng, bạn sẽ cần một trình kích hoạt khác để NULL
các trường thích hợp trong 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;