如何在插入触发器之前访问现有数据?

How to access existing data in before insert trigger?

我有一个table

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 来完成这项工作,但我不知道如何访问 table 中的现有值。这是我所做的:

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;

我知道这是错误的,但我只是想告诉你我需要做什么。问题是编译此触发器 returns 错误,因为 id_documentisreturned 未声明。 我的 table 中可能还有许多具有相同 id 的文档,但最多有一个是借来的,因为我需要保留借来文档的踪迹。 任何帮助将不胜感激。

好吧,我试过了,它似乎运行良好:

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;
/