Trước hết, bạn phải quyết định:
- một trong hai bạn muốn việc chèn hoặc cập nhật không thành công khi nó được thực hiện vào thời điểm không mong muốn
- hoặc bạn muốn phần chèn hoặc bản cập nhật được xử lý nhưng khi đó các cột được đặt thành rỗng.
Bạn không thể có cả hai.
Trong trường hợp bạn muốn đặt các cột thành NULL, đây phải là BEFORE Kích hoạt CHÈN / CẬP NHẬT, do đó các cột đã thay đổi được ghi vào bảng. (Trong trình kích hoạt SAU KHI CHÈN / CẬP NHẬT, cài đặt các trường thành một giá trị nào đó sẽ không có bất kỳ tác dụng nào, hãy lưu ý rằng chúng không được viết.)
Sau đó, SET NEW.STAFFNO = NULL;
không phải là PL / SQL hợp lệ, phải là :NEW.STAFFNO := NULL;
thay vào đó.
CREATE OR REPLACE TRIGGER hi
BEFORE INSERT OR UPDATE OF class_time ON class
FOR EACH ROW
WHEN (new.class_time NOT BETWEEN '09:00' AND '18:00')
BEGIN
:new.staffno := null;
:new.class_day := null;
:new.class_type := null;
:new.roomnum := null;
END;