【问题标题】:Trigger stopping appointments on a Sunday在周日触发停止约会
【发布时间】:2016-03-15 20:52:48
【问题描述】:

我需要编写一个触发器来阻止用户在周日进行预约。
在设置了约束来执行此操作后,我意识到我的课程要求使用我一直在努力工作的触发器来完成。

当前正在接受触发器,没有任何错误,但在输入数据时不执行任何操作。

CREATE OR REPLACE TRIGGER no_sunday_appointments
BEFORE INSERT OR UPDATE ON Appointment
FOR EACH ROW
DECLARE
    AppointmentDate   DATE;
BEGIN
     IF (trim(TO_CHAR(AppointmentDate,'DAY')) = 'SUNDAY')
     THEN RAISE_APPLICATION_ERROR(-20100,
     'No Appointments Allowed On A Sunday');
 END IF;
END;

我尝试了各种更改,例如不使用修剪或使用 not like 'SUNDAY%' 代替 = 无效,或者在修剪之前添加 :new. TO_CHARAppointmentDate

【问题讨论】:

    标签: sql database date database-trigger


    【解决方案1】:

    我猜你想访问正在修改的表中的AppointmentDate。您已将AppointmentDate 声明为变量并且不设置其值——因此该值仍为NULL。所以:

    CREATE OR REPLACE TRIGGER no_sunday_appointments
    BEFORE INSERT OR UPDATE ON Appointment
    FOR EACH ROW
    BEGIN
         IF (trim(TO_CHAR(:new.AppointmentDate, 'DAY')) = 'SUNDAY') THEN
            RAISE_APPLICATION_ERROR(-20100, 'No Appointments Allowed On A Sunday');
         END IF;
    END;
    

    如果没有直接在表中,可能需要变量来计算。

    【讨论】:

    • 非常感谢 :) 我添加声明的唯一原因是因为我收到一条错误消息,指出该值未声明它现在可以正常工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-04
    • 1970-01-01
    • 2014-10-27
    相关资源
    最近更新 更多