Sau đây là ví dụ về Trình kích hoạt TRƯỚC KHI CHÈN HOẶC CẬP NHẬT Oracle để thực hiện xác nhận hợp lệ trong khi chèn hoặc cập nhật các bản ghi trong bảng EMP.
Oracle TRƯỚC KHI CHÈN HOẶC CẬP NHẬT Ví dụ về trình kích hoạt
Trình kích hoạt dưới đây sẽ thực hiện hai kiểm tra sau trên bảng EMP. (1) Nếu chèn các bản ghi, nó sẽ kiểm tra cột hoa hồng không được cao hơn 500. (2) Nếu cập nhật, nó sẽ kiểm tra rằng cột CÔNG VIỆC không được đặt là null.
CREATE OR REPLACE TRIGGER TRIG_EMP_BEF_UPD_INS BEFORE INSERT OR UPDATE ON EMP FOR EACH ROW BEGIN IF INSERTING THEN /* commission should not be greater than 500, for new record*/ IF :new.comm > 500 THEN raise_application_error ( -20001, 'Commission should not be greater than 500.'); END IF; ELSIF UPDATING THEN /* check for column JOB should not be set as null while update*/ IF :new.job IS NULL THEN raise_application_error (-20001, 'Column JOB should have a value.'); END IF; END IF; END;
Kiểm tra phía trên trình kích hoạt để chèn câu lệnh
Insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) Values (7399, 'A.SMITH', 'CLERK', 7902, TO_DATE('12/17/1980 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), 800, 550, 20);
Đầu ra
Error at line 1 ORA-20001: Commission should not be greater than 500. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 6 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 1.
Kiểm tra trình kích hoạt trên để cập nhật tuyên bố
UPDATE EMP SET sal = 900, job = NULL WHERE empno = 7499;
Đầu ra
Error at line 2 ORA-20001: Column JOB should have a value. ORA-06512: at "TRIG_EMP_BEF_UPD_INS", line 12 ORA-04088: error during execution of trigger 'TRIG_EMP_BEF_UPD_INS' Script Terminated on line 2.
Bạn có thể kiểm tra trình kích hoạt này trong lược đồ của mình, bằng cách tải xuống các bảng demo từ liên kết sau Tải xuống tập lệnh Scott Schema.
Xem thêm:
- Làm thế nào để Sử dụng Bảng Tạm thời Toàn cục trong Thủ tục Oracle?
- Ví dụ về Oracle Trigger với mệnh đề WHEN
- Loại bảng trong ví dụ về thủ tục Oracle