Điều này (hoặc ít nhất là) được biết rằng bạn không thể sử dụng các câu lệnh DML trên bảng đột biến bên trong trình kích hoạt. Một đoạn trích từ tài liệu của Oracle :
Bảng đột biến là một bảng đang được sửa đổi bởi một câu lệnh CẬP NHẬT, XÓA hoặc INSERT hoặc một bảng có thể được cập nhật bởi các tác động của ràng buộc XÓA CASCADE.
Phiên phát hành câu lệnh kích hoạt không thể truy vấn hoặc sửa đổi bảng đột biến. Hạn chế này ngăn không cho trình kích hoạt nhìn thấy một tập hợp dữ liệu không nhất quán.
Tuy nhiên, tôi không thể hiểu tại sao trình kích hoạt demo này không bị lỗi với "bảng đột biến" khi tôi thực hiện insert into emp
sử dụng SQL Developer hoặc SQL * Plus:
CREATE OR REPLACE TRIGGER emp_bri
BEFORE INSERT ON emp
FOR EACH ROW
BEGIN
SELECT max(id) + 1 INTO :NEW.id FROM emp;
UPDATE emp SET salary = 5000;
END emp_bri;
Việc chèn hoàn thành thành công với id
giá trị tiếp theo và cập nhật tất cả các emp
bản ghi. Tôi đang sử dụng Cơ sở dữ liệu Oracle 11g Phiên bản doanh nghiệp Phiên bản 11.2.0.1.0. Tôi đã đọc về các kích hoạt hợp chất nhưng mẫu không sử dụng chúng.
select max(id)
để gán các số duy nhất. Chỉ không. Nó đơn giản là không chính xác và nó sẽ không mở rộng quy mô.