【问题标题】:How to access existing data in before insert trigger?如何在插入触发器之前访问现有数据?
【发布时间】:2020-08-14 19:22:27
【问题描述】:

我有一张桌子

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_documentisreturned 未声明。 我的表中可能还有许多具有相同 id 的文档,但最多有一个是借来的,因为我需要保留借来的文档的踪迹。 任何帮助将不胜感激。

【问题讨论】:

    标签: sql oracle oracle11g triggers oracle-sqldeveloper


    【解决方案1】:

    嗯,我试过了,它似乎运作良好:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-05
      • 2011-11-18
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 2023-03-03
      相关资源
      最近更新 更多