Bir tetikleyicinin içindeki bir mutasyon tablosunda DML ifadelerini kullanamayacağınız (veya en azından) biliniyordu. Oracle belgelerinden bir alıntı :
Bir mutasyon tablosu, UPDATE, DELETE veya INSERT deyimi tarafından değiştirilen bir tablo veya DELETE CASCADE sınırlamasının etkileriyle güncellenebilecek bir tablodur.
Triggering deyimini veren oturum, bir mutasyon tabloyu sorgulayamaz veya değiştiremez. Bu kısıtlama, bir tetikleyicinin tutarsız bir veri kümesi görmesini engeller.
Ancak, bir insert into emp
SQL Developer veya SQL * Plus kullanarak gerçekleştirirken bu demo tetikleyicisinin neden "mutasyon tablosu" hatasıyla başarısız olmadığını anlayamıyorum :
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;
Ekleme, bir sonraki id
değerle başarıyla tamamlanır ve tüm emp
kayıtları günceller . Oracle Database 11g Enterprise Edition Sürüm 11.2.0.1.0'ı kullanıyorum. Bileşik tetikleyiciler hakkında okudum ancak örnek bunları kullanmıyor.
select max(id)
eşsiz numaraları atamak için. Sadece yapma. Bu sadece yanlıştır ve ölçeklenmez.