এটি (বা কমপক্ষে ছিল) জানা গেছে যে আপনি ট্রিগারের অভ্যন্তরে কোনও মিউটেশন টেবিলটিতে ডিএমএল স্টেটমেন্ট ব্যবহার করতে পারবেন না। থেকে একটি উদ্ধৃতাংশ ওরাকল ডকুমেন্টেশন :
পরিবর্তনীয় টেবিলটি এমন একটি টেবিল যা কোনও আপডেট, ডিলিট বা INSERT বিবৃতি দ্বারা সংশোধন করা হচ্ছে বা একটি সারণী যা মুছে ফেলা ক্যাসকেডের সীমাবদ্ধতার প্রভাব দ্বারা আপডেট করা যেতে পারে।
যে সেশনটি ট্রিগার স্টেটমেন্ট জারি করেছে তা কোনও মিউটেশন টেবিলকে জিজ্ঞাসা বা সংশোধন করতে পারে না। এই সীমাবদ্ধতা ডেটার অসঙ্গতিপূর্ণ সেট দেখে ট্রিগারকে বাধা দেয়।
তবে, আমি বুঝতে পারি না যে insert into emp
এসকিউএল বিকাশকারী বা এসকিউএল * প্লাস ব্যবহার করার সময় এই ডেমো ট্রিগারটি "মিউটটিং টেবিল" ত্রুটির সাথে কেন ব্যর্থ হচ্ছে না :
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
রেকর্ড আপডেট করে । আমি ওরাকল ডেটাবেস 11 জি এন্টারপ্রাইজ সংস্করণ প্রকাশ 11.2.0.1.0 ব্যবহার করছি। আমি যৌগিক ট্রিগারগুলি সম্পর্কে পড়েছি কিন্তু নমুনা সেগুলি ব্যবহার করে না।
select max(id)
। শুধু না। এটি কেবল ভুল এবং এটিও স্কেল করবে না।