เป็นที่ทราบกันดีว่าคุณไม่สามารถใช้คำสั่ง DML ในตารางการกลายพันธุ์ภายในทริกเกอร์ ข้อความที่ตัดตอนมาจากเอกสารของ Oracle :
ตารางกลายพันธุ์เป็นตารางที่ถูกแก้ไขโดยคำสั่ง UPDATE, DELETE หรือ INSERT หรือตารางที่อาจได้รับการปรับปรุงโดยผลกระทบของข้อ จำกัด DELETE CASCADE
เซสชั่นที่ออกคำสั่งเรียกไม่สามารถสอบถามหรือแก้ไขตารางการกลายพันธุ์ ข้อ จำกัด นี้ป้องกันไม่ให้ทริกเกอร์เห็นชุดข้อมูลที่ไม่สอดคล้องกัน
อย่างไรก็ตามฉันไม่เข้าใจว่าทำไมทริกเกอร์การสาธิตนี้ไม่ได้ล้มเหลวด้วยข้อผิดพลาด "การกลายพันธุ์ตาราง" เมื่อฉันทำการinsert into emp
ใช้ SQL Developer หรือ 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;
การแทรกเสร็จสมบูรณ์ด้วยid
ค่าถัดไปและอัพเดตemp
ระเบียนทั้งหมด ฉันใช้ Oracle Database 11g Enterprise Edition รีลีส 11.2.0.1.0 ฉันได้อ่านทริกเกอร์ผสมแล้ว แต่ตัวอย่างไม่ได้ใช้
select max(id)
การกำหนดหมายเลขที่ไม่ซ้ำกัน ทำไม่ได้ มันไม่ถูกต้องและจะไม่ขยายเช่นกัน