Bạn đang thực hiện kích hoạt "trước khi chèn". Trong một trình kích hoạt như vậy, bạn không chèn vào cùng một bảng - nếu không, bạn có thể nhận được một vòng lặp vô hạn. Chỉ cần gán cho giá trị biến:
CREATE OR REPLACE TRIGGER trig_deptno2
BEFORE INSERT ON dept2
FOR EACH ROW
DECLARE v_deptno NUMBER(2) ;
BEGIN
SELECT coalesce(MAX(deptno) + 1, 1) INTO :new.deptno
FROM dept2 ;
END trig_deptno2 ;
Khi trình kích hoạt kết thúc, nó sẽ chèn các giá trị phù hợp từ new
biến.
Hãy để tôi chỉ nói rằng các chuỗi tồn tại là có lý do, và bạn nên sử dụng chúng cho mục đích này. Việc cố gắng bắt chước chức năng của chúng có thể dẫn đến lỗi.