Oracle
 sql >> база данни >  >> RDS >> Oracle

Създайте тригер, който актуализира колона в една таблица, когато колона в друга таблица се актуализира

Как да получа датата и идентификатора на реда?

Ако приемем, че това са колони във вашата таблица ORDER, наречена DELIVERY_DATE и идентификатор на задействането ви, трябва да изглежда така:

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE ON Order
    FOR EACH ROW 
BEGIN
   if :new.delivery_date != :old.delivery_date
   then
       UPDATE Delivery d
       set d.delivery_date = :new.delivery_date
       where d.order_id = :new.id;
    end if;
END;

Обърнете внимание на клаузата FOR EACH ROW:която е необходима за препращане към стойности от отделни редове. Използвах конструкция IF, за да тествам дали да изпълня UPDATE при доставка. Ако нямате друга логика във вашия тригер, можете да го напишете така...

CREATE OR REPLACE TRIGGER your_trigger_name
    BEFORE UPDATE OF delivery_date ON Order
    FOR EACH ROW 
BEGIN
   UPDATE Delivery d
   set d.delivery_date = :new.delivery_date
   where d.order_id = :new.id;
END;

Отговорих на въпроса, който зададете, но настрана ще отбележа, че вашият модел на данни е неоптимален. Правилно нормализиран дизайн би задържал DELIVERY_DATE само на една маса:DELIVERY изглежда логично място за това.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете ID на последния вмъкнат запис в oracle db

  2. какво представлява материализираните възгледи в Oracle?

  3. Функция BITAND() в Oracle

  4. Как да вмъкна файл в базата данни на Oracle?

  5. Получаване на грешка при изпълнение на пакета