Как получить доступ к существующим данным перед триггером вставки? - PullRequest
1 голос
/ 30 апреля 2020

У меня есть таблица

CREATE TABLE borrow_document1 (
  id_borrow INT,
  id_client INT,
  id_document INT,
  isReturned number(1),
  CONSTRAINT PK_document PRIMARY KEY ( id_borrow));

Я хочу запретить заимствование того же документа, если он не возвращается (если isReturned равно 0). Я пытаюсь создать trigger для этой работы, но я не знаю, как получить доступ к существующим значениям в таблице. вот что я сделал:

create or replace trigger check_borrow
BEFORE INSERT on borrow_document1
for each row when(new.id_document = id_document)
BEGIN
IF ISRETURNED = 0 THEN
    raise_application_error(-20111,'document is borrowed');
end if;
END;

Я знаю, что это неправильно, но я просто пытаюсь показать вам, что мне нужно сделать. Проблема в том, что компиляция этого триггера возвращает ошибку, поскольку id_document и isreturned не объявлены. У меня также может быть много документов с одинаковым идентификатором в моей таблице, но самое большее один из них заимствован, потому что мне нужно следить за заимствованными документами. любая помощь будет высоко ценится.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

Ну, я попробовал это, и, кажется, работает хорошо:

create or replace trigger check_borrow
BEFORE INSERT on borrow_document1
for each row
declare
cpt int;
BEGIN
select COUNT(*) into cpt FROM borrow_document1 WHERE id_document = :new.id_document AND isReturned = '0';
IF cpt>0 THEN
        raise_application_error(-20111,'document is borrowed');
end if;
END;
/
0 голосов
/ 30 апреля 2020

Я думаю, вы должны проверить, существует ли запись: Надеюсь, это поможет:

IF EXISTS(SELECT 'X' FROM borrow_document1 WHERE id_document = '**documentnumber**' AND isReturned = '1')
    PRINT 'document is borrowed.'
ELSE 
    PRINT 'done';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...