gpt4 book ai didi

sql - 创建在两个表上运行的触发器

转载 作者:太空狗 更新时间:2023-10-30 01:51:55 25 4
gpt4 key购买 nike

我有两个表,COURSEOFFERING。他们的专栏是:

COURSE (
courseId,
title,
cost,
duration
)

OFFERING (
offeringID,
instructor,
startDate,
endDate,
courseId,
locationId
).

我想配置一个触发器,确保持续时间为 5 天的类(class)(来自 COURSE 表的持续时间列)不能在 12 月(来自 startDate 列)提供OFFERING 表)。我提出了以下 SQL 查询:

CREATE OR REPLACE TRIGGER checkDuration
BEFORE INSERT OR UPDATE ON
(course c JOIN offering o
ON
c.courseId = o.courseId)
FOR EACH ROW
BEGIN
IF ((to_char(:new.startDate, 'fmMONTH') = 'DECEMBER') AND duration = 5)
THEN
raise_application_error(-20001, 'Courses of five days duration cannot be run in December');
END IF;
END;

触发器已创建,但有错误。

最佳答案

这非常有效。

CREATE OR REPLACE TRIGGER checkDuration
BEFORE INSERT OR UPDATE on offering
FOR EACH ROW
DECLARE
isFound NUMBER;
BEGIN
SELECT 1 INTO isFound FROM DUAL WHERE EXISTS (
SELECT * FROM Course c
WHERE c.courseId = :new.courseId AND c.duration = 5);
IF EXTRACT(MONTH FROM :new.startDate) = 12
THEN RAISE_APPLICATION_ERROR(-20001, 'Courses of five days duration cannot be run in December');
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
END;

关于sql - 创建在两个表上运行的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com