在周日触发停止约会
Trigger stopping appointments on a Sunday
我需要编写一个触发器来阻止用户在周日进行预约。
在设置了执行此操作的约束后,我意识到我的课程作业要求它通过一个我一直在努力工作的触发器来完成。
当前正在接受触发器,没有任何错误,但在输入数据时不执行任何操作。
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;
我尝试了各种更改,例如不使用 trim 或使用 not like 'SUNDAY%' 而不是 = 但没有效果,或者在 trim 之前添加 :new.
TO_CHAR
和 AppointmentDate
.
我猜您想在正在修改的 table 中访问 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;
如果不直接在table中,您可能需要变量来计算它。
我需要编写一个触发器来阻止用户在周日进行预约。
在设置了执行此操作的约束后,我意识到我的课程作业要求它通过一个我一直在努力工作的触发器来完成。
当前正在接受触发器,没有任何错误,但在输入数据时不执行任何操作。
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;
我尝试了各种更改,例如不使用 trim 或使用 not like 'SUNDAY%' 而不是 = 但没有效果,或者在 trim 之前添加 :new.
TO_CHAR
和 AppointmentDate
.
我猜您想在正在修改的 table 中访问 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;
如果不直接在table中,您可能需要变量来计算它。