मैं एक ट्रिगर बनाना चाहता हूं जो 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) ;
अग्रिम में धन्यवाद
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
आप उसी टेबल पर डीएमएल (आपका डिलीट) का उपयोग नहीं कर सकते हैं जिससे ट्रिगर संबंधित है। डालने से पहले अपने ट्रिगर को आग में बदलें, और सम्मिलन को पहले स्थान पर होने से रोकने के लिए बस त्रुटि बढ़ाएं।
ध्यान दें कि आपको अपवाद के लिए एक कोड संख्या भी घोषित करनी होगी, और आपका तर्क होना चाहिए 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;
संदर्भ के लिए यहां देखें:
- https://www.oracletutorial.com/plsql-tutorial/plsql-raise/
- ट्रिगर के अंदर अपवाद कैसे बढ़ाएं? क्या इसे करने का कोई तरीका है?
संबंधित सवाल
नए सवाल
oracle
ओरेकल डेटाबेस ओरेकल कॉर्पोरेशन द्वारा बनाया गया एक मल्टी-मॉडल डेटाबेस मैनेजमेंट सिस्टम है। Oracle, जैसे जावा और MySQL के स्वामित्व वाले अन्य उत्पादों के लिए इस टैग का उपयोग न करें।