Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

ट्रिगर अगर अन्य

पीएल/एसक्यूएल सिंटैक्स आईएफ क्लॉज में एसक्यूएल स्टेटमेंट्स को शामिल करने की अनुमति नहीं देता है।

सही तरीका यह है कि सेलेक्ट स्टेटमेंट को अलग किया जाए और फिर उसके परिणाम का परीक्षण किया जाए। तो वह होगा:

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 अस्तित्व से बाहर सामान्यीकृत किया जाना चाहिए था।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में समवर्ती अद्यतन:लॉक करना या नहीं?

  2. अपरिभाषित फ़ंक्शन पर कॉल करें oci_connect ()

  3. oracle को php . से जोड़ने के लिए OCI8 को स्थापित और कॉन्फ़िगर करें

  4. Oracle SQL डेवलपर - java.library.path में कोई ocijdbc12 नहीं है

  5. SQLcl (Oracle) में CSV फ़ाइल में क्वेरी परिणाम कैसे निर्यात करें