小编Mad*_*leC的帖子

在BEFORE INSERT触发器(Oracle)中使用IF EXISTS(SELECT ...)

我的代码不起作用,Oracle告诉我触发器已经创建了构建错误.显然我无法获得有关构建错误的更准确信息......

我之前没有做过很多SQL,所以我对语法并不熟悉.我有预感,这是我不喜欢的IF EXISTS(SELECT ...)THEN声明,我一直在谷歌搜索类似的例子,但我真的找不到任何有用的东西.

所以关于代码:

  • "debut"是一个日期属性(意思是开始)
  • "fin"是另一个日期属性(意味着结束)
  • 如果这两行具有相同的"numInfirmier"属性,我想确保NEW行的日期与表中的任何其他行不重叠.
  • 因此,我选择与NEW行和重叠日期具有相同numInfirmier的所有行.
  • 如果选择中存在任何东西,我会引发错误.

    CREATE OR REPLACE TRIGGER chev_surv
    BEFORE INSERT OR UPDATE ON surveillance
    FOR EACH ROW
    BEGIN
        IF EXISTS (
            SELECT * FROM surveillance
            WHERE surveillance.numInfirmier = :NEW.numInfirmier
            AND ((surveillance.debut > :NEW.debut AND surveillance.debut < :NEW.fin)
            OR (surveillance.fin > :NEW.debut AND surveillance.fin < :NEW.fin))
        ) THEN
            RAISE_APPLICATION_ERROR(-20001,
            'Il ne doit pas y avoir de chevauchement entre deux périodes surveillance pour un surveillant.');
        END IF;
    END;
    /
    
    Run Code Online (Sandbox Code Playgroud)

知道什么是错的吗?

sql oracle select triggers exists

4
推荐指数
1
解决办法
5万
查看次数

标签 统计

exists ×1

oracle ×1

select ×1

sql ×1

triggers ×1