Триггер после вставки и объединения таблиц для обновления - PullRequest
1 голос
/ 29 января 2020

Я получил 3 таблицы:

BOOK(bookid primary, nbloans)
COPIES(copyid primary,bookid)
BORROW(bid primary,copyid)

Я хочу создать триггер после вставки на заем, который увеличивает BOOK.nbloans. Я попробовал следующее:

CREATE OR REPLACE TRIGGER trigger4
AFTER INSERT ON BORROW
FOR EACH ROW   
BEGIN 
   UPDATE BOOK
   SET NBLOANS = NBLOANS + 1
   WHERE BORROW.COPYID=COPIES.COPYID AND  COPIES.BOOKID=BOOK.BOOKID;
END; 

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Вы можете использовать оператор MERGE следующим образом:

CREATE OR REPLACE TRIGGER trigger4
AFTER INSERT ON BORROW
FOR EACH ROW   
BEGIN 
   MERGE INTO BOOKS B
   USING (SELECT copyid,bookid FROM COPIES WHERE copyid = :NEW.copyid ) C
   ON (B.BOOKID = C.bookid)
   WHEN MATCHED THEN UPDATE SET B.nbloans = nbloans + 1;
END;

Cheers !!

0 голосов
/ 29 января 2020

Я не уверен, что ваш вопрос, но триггер в SQL обычно относится к :new и / или :old. Так что я бы ожидал что-то вроде этого:

CREATE OR REPLACE TRIGGER trigger4
AFTER INSERT ON BORROW
FOR EACH ROW   
BEGIN 
   UPDATE BOOK B
       SET NBLOANS = NBLOANS + 1
      WHERE B.BOOKID = (SELECT C.BOOKID
                        FROM COPIES C
                        WHERE C.COPYID = :NEW.COPYID
                       );
END; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...