You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle条件插入触发器实现:限制健身类书籍作者数≤3

Oracle 触发器实现方案

核心思路

不需要临时表,直接利用:new前缀获取待插入的书籍ID,关联BOOK表判断分类,再统计该书籍的现有作者数,超过3人则抛出错误阻止插入。

完整触发器代码

假设BOOK表的书籍ID字段为book_id,分类字段为category;BOOKAUTHOR表的书籍ID字段为book_id,作者ID字段为author_id(对应你示例中的'9000000099'和'P105'),触发器代码如下:

CREATE OR REPLACE TRIGGER trg_check_fitness_author_count
BEFORE INSERT ON BOOKAUTHOR
FOR EACH ROW
DECLARE
    v_book_category BOOK.category%TYPE;
    v_author_count NUMBER;
BEGIN
    -- 获取待插入书籍的分类
    SELECT category INTO v_book_category
    FROM BOOK
    WHERE book_id = :new.book_id;

    -- 如果是FITNESS分类,检查作者总数
    IF v_book_category = 'FITNESS' THEN
        -- 统计该书籍已有的作者数量
        SELECT COUNT(*) INTO v_author_count
        FROM BOOKAUTHOR
        WHERE book_id = :new.book_id;

        -- 若已有3位及以上作者,阻止插入
        IF v_author_count >= 3 THEN
            RAISE_APPLICATION_ERROR(-20001, 'FITNESS类书籍作者不能超过3人');
        END IF;
    END IF;
EXCEPTION
    -- 处理书籍不存在的情况(可选)
    WHEN NO_DATA_FOUND THEN
        RAISE_APPLICATION_ERROR(-20002, '关联书籍不存在');
END;
/

关键细节说明

  • :new前缀:代表待插入的新记录,:new.book_id就是你要插入的那条BOOKAUTHOR记录中的书籍ID,用来关联BOOK表和统计现有作者数。
  • BEFORE INSERT:必须用前置触发,这样能在数据真正插入数据库前完成校验,不符合条件就直接终止操作。
  • 错误抛出:用RAISE_APPLICATION_ERROR自定义错误(错误码范围-20000到-20999),会直接中断插入操作并返回指定提示。

测试验证

当执行你提供的插入语句:

INSERT INTO BOOKAUTHOR VALUES ('9000000099', 'P105');

如果9000000099对应的书籍属于FITNESS分类,且BOOKAUTHOR中已有3位该书籍的作者,触发器会抛出错误,插入操作被阻止。

内容的提问来源于stack exchange,提问作者Lavacave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:38:22