ट्रिगर में ईमेल भेजने का प्रयास करना आम तौर पर एक बुरा विचार होगा।
- यदि सिस्टम ईमेल भेजने में असमर्थ है (उदाहरण के लिए, क्योंकि एसएमटीपी सर्वर अस्थायी रूप से बंद है), ट्रिगर विफल हो जाएगा और ट्रिगरिंग स्टेटमेंट विफल हो जाएगा और वापस रोल किया जाएगा। ऐसा बहुत कम होता है कि आप वास्तव में अंतर्निहित लेन-देन को केवल इसलिए रोकना चाहेंगे क्योंकि आप एक ईमेल भेजने में सक्षम नहीं थे।
- ईमेल भेजना गैर-लेनदेन है। इसका मतलब है कि आप उन परिवर्तनों के लिए ईमेल भेजेंगे जो कभी प्रतिबद्ध नहीं होते। और आप कई बार ईमेल भेजेंगे क्योंकि Oracle रोलबैक करना चुनता है और
INSERT
के सभी या कुछ हिस्सों को फिर से निष्पादित करता है लेखन स्थिरता बनाए रखने के लिए कथन।
आपको आमतौर पर एक डेटाबेस नौकरी के साथ बेहतर सेवा दी जाएगी जो समय-समय पर उन पंक्तियों की तलाश करती है जिन्हें ईमेल भेजने, ईमेल भेजने और फिर तालिका को अपडेट करने की आवश्यकता होती है। आप या तो पुराने DBMS_JOB
. का उपयोग कर सकते हैं पैकेज या नया और अधिक परिष्कृत DBMS_SCHEDULER
पैकेट।
CREATE OR REPLACE PROCEDURE process_issues
AS
BEGIN
FOR i IN (SELECT *
FROM your_table_name
WHERE issue_added = 1
AND email_sent = 0)
LOOP
send_email( i.issue_id );
UPDATE your_table_name
SET email_sent = 1
WHERE issue_id = i.issue_id;
END LOOP;
END;
जो तब हर 5 मिनट में चलने के लिए निर्धारित है (आप DBMS_SCHEDULER
का भी उपयोग कर सकते हैं) पैकेज)
DECLARE
l_jobno PLS_INTEGER:
BEGIN
dbms_job.submit( l_jobno,
'BEGIN process_issues; END;',
sysdate + interval '5' minute,
'sysdate + interval ''5'' minute' );
commit;
END;
आप UTL_MAIL पैकेज
का उपयोग कर सकते हैं send_email
. को लागू करने के लिए प्रक्रिया। आपको शायद केवल UTL_MAIL.SEND
. पर कॉल करने की आवश्यकता है उपयुक्त मापदंडों के साथ (यह मानते हुए कि आपने अपना SMTP_OUT_SERVER
कॉन्फ़िगर किया है पैरामीटर और आपके उपयोगकर्ता को UTL_MAIL
. तक उचित पहुंच प्रदान की गई है पैकेज और एक एसीएल के लिए जो आपको उस एसएमटीपी सर्वर के साथ संचार करने की अनुमति देता है)।