पीएल/एसक्यूएल सिंटैक्स आईएफ क्लॉज में एसक्यूएल स्टेटमेंट्स को शामिल करने की अनुमति नहीं देता है।
सही तरीका यह है कि सेलेक्ट स्टेटमेंट को अलग किया जाए और फिर उसके परिणाम का परीक्षण किया जाए। तो वह होगा:
create or replace trigger trig1
after insert on table_1
for each row
declare
v table2.column2%type;
begin
select table2.column2
into v
from table2
where table2.id= :new.id;
if v is null
then
update table2
set table2.column2 = :new.column1
where table2.id = :new.id;
end if;
end trig1;
ध्यान दें कि यह table2
. में एकाधिक पंक्तियों के अस्तित्व को संभाल नहीं पाता है मानदंड से मेल खाते हैं, या वास्तव में कोई मेल खाने वाली पंक्तियाँ नहीं हैं। यह लॉकिंग को भी हैंडल नहीं करता है।
साथ ही, ध्यान रखें कि इस तरह का कोड बहु-उपयोगकर्ता वातावरण में अच्छी तरह से काम नहीं करता है। इसलिए मैंने लॉकिंग का जिक्र किया। इस प्रकार की आवश्यकताओं को संभालने के लिए आपको वास्तव में प्रक्रियात्मक तर्क का उपयोग करना चाहिए। हालांकि, जैसा कि अक्सर गैर-कल्पित ट्रिगर के मामले में होता है, असली अपराधी एक खराब डेटा मॉडल है। table2.column2
अस्तित्व से बाहर सामान्यीकृत किया जाना चाहिए था।