मैं एक ट्रिगर बनाना चाहता हूं जो 2 पत्रिकाओं, 'एले' और 'टाइम' का प्रबंधन करता है।

इसलिए यदि उपयोगकर्ता पत्रिका तालिका में एक नया रिकॉर्ड डालने का प्रयास करता है जो इन दोनों से मेल नहीं खाता है, तो बाद वाले को नहीं रखा जाना चाहिए।

मेरे पास पहले से ही सभी टेबल और सामान तैयार हैं इसमें कोई समस्या नहीं है।

समस्या यह है कि मैं इसे ठीक से करने का कोई तरीका नहीं समझ सकता, एक मित्र ने कहा कि मेरा यह कोड केवल लाइनों के साथ इंटरैक्ट करता है, और मुझे पूरी तालिका के लिए एक कोड की आवश्यकता है और सिफारिश की है कि मैं एक कर्सर का उपयोग करता हूं

यहाँ मेरा कोड है:

Create or replace trigger TMag
After INSERT on Magazine
FOR EACH ROW
DECLARE
e EXCEPTION;
BEGIN
IF :new.mag_nom!= 'Elle' or :new.mag_nom!= 'Time' THEN
Delete from Magazine where ISBN=:new.ISBN;
raise e;
END IF;
exception
when e then dbms_output.put_line('nom mag incorrecte');
END;

यहाँ मेरी टेबल पर एक नज़र है:

CLIENT(CIN, CL_NOM, CL_ADDR, CL_VILLE, EMAIL, CONTACT_NUM);
MAGAZINE(ISBN, MAG_NOM, PRIX_Mois);
ABONNEMENT(AB_ID, #ISBN, #IN_ID, Months);
INVOICE(IN_ID, #CIN, dateI, State) ;

अग्रिम में धन्यवाद

1
ProgEnthusiast 3 जिंदा 2021, 06:53

2 जवाब

सबसे बढ़िया उत्तर

मुझे लगता है कि आपको ट्रिगर की आवश्यकता नहीं है, बल्कि एक CHECK बाधा बनाकर आंतरिक रूप से समस्या का समाधान करें जैसे कि

ALTER TABLE Magazine
ADD CONSTRAINT correcte_mag_nom  
  CHECK (mag_nom IN ('Elle', 'Time'));

यदि प्रदान किया गया मान mag_nom कॉलम के लिए योग्य नहीं है, तो यह इस रूप में प्रदर्शित होगा

ORA-02290 check constrain (<schema>.CORRECTE_MAG_NUM) violated
4
Barbaros Özhan 4 जिंदा 2021, 11:20

आप उसी टेबल पर डीएमएल (आपका डिलीट) का उपयोग नहीं कर सकते हैं जिससे ट्रिगर संबंधित है। डालने से पहले अपने ट्रिगर को आग में बदलें, और सम्मिलन को पहले स्थान पर होने से रोकने के लिए बस त्रुटि बढ़ाएं।

ध्यान दें कि आपको अपवाद के लिए एक कोड संख्या भी घोषित करनी होगी, और आपका तर्क होना चाहिए if new.name!='Elle' AND new.name!='Time' . यदि आप "OR" का उपयोग करते हैं तो आपका ट्रिगर टेबल पर किसी भी इन्सर्ट की अनुमति नहीं देगा...

CREATE OR REPLACE TRIGGER TMAG
BEFORE INSERT ON MAGAZINE
FOR EACH ROW
DECLARE
    e_bad_mag_nom EXCEPTION;
    PRAGMA EXCEPTION_INIT (e_bad_mag_nom, -20001)
BEGIN
    IF :new.mag_nom!= 'Elle' AND :new.mag_nom!= 'Time' THEN
        raise e_bad_mag_nom;
    END IF;
EXCEPTION
    when e_bad_mag_nom then dbms_output.put_line('nom mag incorrecte');
END;

संदर्भ के लिए यहां देखें:

1
pmdba 3 जिंदा 2021, 07:35