डेटाबेस ट्रिगर: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(27 intermediate revisions by 4 users not shown)
Line 1: Line 1:
[[डेटाबेस]] ट्रिगर [[प्रक्रियात्मक कोड]] है जो किसी विशेष [[तालिका (डेटाबेस)]] या डेटाबेस में [[देखें (डेटाबेस)|देखने (डेटाबेस)]] पर कुछ ईवेंट (कंप्यूटिंग) के उत्तर में स्वचालित रूप से निष्पादित होता है। ट्रिगर का उपयोग अधिकतम डेटाबेस पर जानकारी की [[डेटाबेस अखंडता]] को बनाए रखने के लिए किया जाता है। उदाहरण के लिए, जब कर्मचारियों की तालिका में नया रिकॉर्ड (नए कार्यकर्ता का प्रतिनिधित्व) सम्मिलित किया जाता है, तो करों, अवकाश और वेतन की तालिकाओं में भी नए रिकॉर्ड बनाए जाने चाहिए। ट्रिगर का उपयोग ऐतिहासिक डेटा लॉग करने के लिए भी किया जा सकता है, उदाहरण के लिए कर्मचारियों के पूर्व वेतन पर दृष्टि रखने के लिए किया जाता है।
'''डेटाबेस ट्रिगर''' [[प्रक्रियात्मक कोड]] है जो किसी विशेष [[तालिका (डेटाबेस)|सारणी (डेटाबेस)]] या डेटाबेस में [[देखें (डेटाबेस)|देखने (डेटाबेस)]] पर कुछ प्रोग्राम (कंप्यूटिंग) का उत्तर में स्वचालित रूप से निष्पादित करता है। ट्रिगर का उपयोग अधिकतम डेटाबेस पर जानकारी की [[डेटाबेस अखंडता]] को बनाए रखने के लिए किया जाता है। उदाहरण के लिए, जब कर्मचारियों की सारणी में नया रिकॉर्ड (नए कार्यकर्ता का प्रतिनिधित्व) सम्मिलित किया जाता है, अवकाश एवं वेतन की सारणी में भी नए रिकॉर्ड बनाए जाने चाहिए। ट्रिगर का उपयोग ऐतिहासिक डेटा लॉग करने के लिए भी किया जा सकता है, उदाहरण के लिए कर्मचारियों के पूर्व वेतन पर दृष्टि रखने के लिए किया जाता है।
 
[[डीबीएमएस]] '''में ट्रिगर'''


== डीबीएमएस '''में ट्रिगर''' ==
नीचे कुछ लोकप्रिय डीबीएमएस समर्थन ट्रिगर्स के विवरण की श्रृंखला दी गई है।
नीचे कुछ लोकप्रिय डीबीएमएस समर्थन ट्रिगर्स के विवरण की श्रृंखला दी गई है।


=== ओरेकल ===
=== आकाशवाणी ===
डेटा संशोधित होने पर उस आग (और पीएल/एसक्यूएल कोड को निष्पादित) ट्रिगर करने के अतिरिक्त, [[ओरेकल डाटाबेस]] उस ट्रिगर का समर्थन करता है जब स्कीमा-स्तरीय ऑब्जेक्ट्स (अर्थात, टेबल) संशोधित होते हैं और जब उपयोगकर्ता लॉगऑन या लॉगऑफ घटनाएं होती हैं।
डेटा संशोधित होने पर उस अग्नि प्रकट होने को (एवं पीएल/एसक्यूएल कोड को निष्पादित) ट्रिगर करने के अतिरिक्त, [[ओरेकल डाटाबेस|आकाशवाणी डाटाबेस]] उस ट्रिगर का समर्थन करता है जब स्कीमा-स्तरीय ऑब्जेक्ट्स (अर्थात, टेबल) संशोधित होते हैं और जब उपयोगकर्ता लॉगऑन या लॉगऑफ़ ईवेंट होते हैं।


==== स्कीमा-लेवल ट्रिगर्स ====
==== स्कीमा-लेवल ट्रिगर्स ====
Line 13: Line 12:
* ऑल्टर से पूर्व
* ऑल्टर से पूर्व
* आल्टर के पश्चात
* आल्टर के पश्चात
* गिरने से पूर्व
* ड्राप से पूर्व
* गिरने के पश्चात
* ड्राप के पश्चात
* चिह्नित से पूर्व
* चिह्नित से पूर्व


चार मुख्य प्रकार के ट्रिगर हैं:
चार मुख्य प्रकार के ट्रिगर हैं:
# रो-लेवल ट्रिगर: यह किसी पंक्ति परिवर्तन के किसी भी कॉलम मान से पहले या बाद में निष्पादित हो जाता है
# '''रो-लेवल ट्रिगर:''' यह किसी पंक्ति परिवर्तन के किसी भी कॉलम मान से पूर्व या पश्चात में निष्पादित हो जाता हैI
# कॉलम-स्तरीय ट्रिगर: निर्दिष्ट कॉलम परिवर्तन से पहले या बाद में इसे निष्पादित किया जाता है
# '''कॉलम-स्तरीय ट्रिगर:''' निर्दिष्ट कॉलम परिवर्तन से पूर्व या पश्चात में इसे निष्पादित किया जाता हैI
# प्रत्येक पंक्ति प्रकार के लिए: यह ट्रिगर एक बार सम्मिलित/अद्यतन/हटाए जाने से प्रभावित [[परिणाम सेट]] की प्रत्येक पंक्ति के लिए निष्पादित हो जाता है
# '''प्रत्येक पंक्ति प्रकार के लिए:''' यह ट्रिगर सम्मिलित/अद्यतन/विस्थापित किये जाने से प्रभावित [[परिणाम सेट|परिणाम दृढ़]] की प्रत्येक पंक्ति के लिए निष्पादित हो जाता हैI
# प्रत्येक स्टेटमेंट प्रकार के लिए: यह ट्रिगर पूरे परिणाम सेट के लिए केवल एक बार निष्पादित होता है, लेकिन हर बार स्टेटमेंट के निष्पादित होने पर भी आग लग जाती है।
# '''प्रत्येक कथन प्रकार के लिए:''' यह ट्रिगर सम्पूर्ण परिणाम दृढ़ के लिए केवल निष्पादित होता है, किन्तु कथन के निष्पादित होने पर भी अग्नि प्रकट हो जाती है।


==== सिस्टम-लेवल ट्रिगर्स ====
==== प्रणाली स्तरीय ट्रिगर्स ====
[[Oracle8i]] से, डेटाबेस ईवेंट - लॉगऑन, लॉगऑफ़, स्टार्टअप - Oracle ट्रिगर्स को सक्रिय कर सकते हैं।<ref>
[[Oracle8i]] से, डेटाबेस प्रोग्राम- लॉगऑन, लॉगऑफ़, स्टार्टअप- आकाशवाणी ट्रिगर्स को सक्रिय कर सकते हैं।<ref>
{{cite book
{{cite book
| last1 = Nanda
| last1 = Nanda
Line 48: Line 47:
</ref>
</ref>


=== [[माइक्रोसॉफ्ट डॉक्स|माइक्रोसॉफ्ट एसक्यूएल]] सर्वर ===


=== [[माइक्रोसॉफ्ट डॉक्स]] सर्वर ===
डीडीएल ट्रिगर्स के लिए माइक्रोसॉफ्ट एसक्यूएल सर्वर में सभी उपलब्ध फायरिंग इवेंट्स की सूची माइक्रोसॉफ्ट एसक्यूएल पर उपलब्ध है।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/sql/relational-databases/triggers/ddl-events?view=sql-server-ver15|title=DDL Events - SQL Server}}</ref>


DDL ट्रिगर्स के लिए Microsoft SQL सर्वर में सभी उपलब्ध फायरिंग इवेंट्स की एक सूची Microsoft डॉक्स पर उपलब्ध है।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/sql/relational-databases/triggers/ddl-events?view=sql-server-ver15|title=DDL Events - SQL Server}}</ref>
अस्थायी सम्मिलित एवं विस्थापित किये गए सारणी तक पहुँचने के माध्यम से ट्रिगर्स (या संशोधन के पश्चात डेटा का परीक्षण) में नियमबद्ध क्रियाएं करना।
अस्थायी सम्मिलित और हटाए गए तालिकाओं तक पहुँचने के माध्यम से ट्रिगर्स (या संशोधन के बाद डेटा का परीक्षण) में सशर्त क्रियाएं करना।


=== पोस्टग्रेएसक्यूएल ===
=== पोस्टग्रेएसक्यूएल ===
1997 में ट्रिगर्स के लिए समर्थन पेश किया गया। SQL:2003 में निम्नलिखित कार्यक्षमता पहले PostgreSQL में लागू नहीं की गई थी:
1997 में ट्रिगर्स के लिए समर्थन प्रस्तुत किया गया, एसक्यूएल: 2003 में निम्नलिखित कार्यक्षमता पूर्व पोस्टग्रेएसक्यूएल में प्रारम्भ नहीं की गई थी:
* एसक्यूएल ट्रिगर्स को विशिष्ट कॉलम के अपडेट पर आग लगाने की अनुमति देता है; PostgreSQL के संस्करण 9.0 के रूप में यह सुविधा PostgreSQL में भी लागू की गई है।
* एसक्यूएल ट्रिगर्स को विशिष्ट कॉलम के अद्यतन पर अग्नि प्रकट करने की अनुमति देता है; पोस्टग्रेएसक्यूएल के संस्करण 9.0 के रूप में यह सुविधा पोस्टग्रेएसक्यूएल में भी प्रारम्भ की गई है।
* मानक सेलेक्ट (एसक्यूएल), इन्सर्ट (एसक्यूएल), [[अद्यतन (एसक्यूएल)]] के अलावा कई एसक्यूएल स्टेटमेंट्स के निष्पादन की अनुमति देता है, जैसे क्रिएट टेबल को ट्रिगर एक्शन के रूप में। यह क्रिएट टेबल को कॉल करने के लिए एक संग्रहीत कार्यविधि या फ़ंक्शन बनाकर किया जा सकता है।<ref>{{Cite web|url=https://www.postgresql.org/docs/9.0/sql-createtrigger.html|title=PostgreSQL: Documentation: 9.0: CREATE TRIGGER|website=www.postgresql.org|date=8 October 2015}}</ref>
* मानक सेलेक्ट (एसक्यूएल), इन्सर्ट (एसक्यूएल), [[अद्यतन (एसक्यूएल)]] के अतिरिक्त कई एसक्यूएल कथन के निष्पादन की अनुमति देता है, जैसे क्रिएट टेबल को ट्रिगर कार्य के रूप में, यह क्रिएट टेबल को संबोधन करने के लिए संग्रहीत कार्यविधि या कार्यक्रम बनाकर किया जा सकता है।<ref>{{Cite web|url=https://www.postgresql.org/docs/9.0/sql-createtrigger.html|title=PostgreSQL: Documentation: 9.0: CREATE TRIGGER|website=www.postgresql.org|date=8 October 2015}}</ref>
सार:
सार:
  CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }


<वाक्यविन्यास प्रकाश लैंग = पोस्टग्रेस्क्ल>
    ON TABLE [ FOR [ EACH ] { ROW | STATEMENT } ]
ट्रिगर नाम बनाएं { पहले | बाद } { घटना [या ... ] }
    EXECUTE PROCEDURE funcname ( arguments )
    टेबल पर [[प्रत्येक] के लिए {पंक्ति | कथन } ]
    निष्पादन प्रक्रिया funcname (तर्क)
</वाक्यविन्यास हाइलाइट>


=== फायरबर्ड ===
=== फायरबर्ड ===
फ़ायरबर्ड (डेटाबेस सर्वर) प्रति टेबल ट्रिगर्स से पहले या बाद में, INSERT, UPDATE, DELETE (या इसके किसी भी संयोजन) ट्रिगर्स के कई पंक्ति-स्तर का समर्थन करता है, जहां वे हमेशा डिफ़ॉल्ट तालिका परिवर्तनों के अतिरिक्त होते हैं, और ट्रिगर रिश्तेदार का क्रम एक दूसरे को निर्दिष्ट किया जा सकता है जहां यह अन्यथा अस्पष्ट होगा (POSITION क्लॉज।) ट्रिगर दृश्यों पर भी मौजूद हो सकते हैं, जहां वे हमेशा ट्रिगर के बजाय डिफ़ॉल्ट अद्यतन योग्य दृश्य तर्क को प्रतिस्थापित करते हैं। (संस्करण 2.1 से पहले, डिफ़ॉल्ट लॉजिक के साथ-साथ अपडेट किए जाने योग्य माने जाने वाले दृश्यों पर ट्रिगर चलेंगे।)
फ़ायरबर्ड (डेटाबेस सर्वर) प्रति टेबल ट्रिगर्स से पूर्व या पश्चात में, सम्मिलित करें (INSERT), अद्यतन करें (UPDATE), विस्थापित (DELETE) (या इसके किसी भी संयोजन) ट्रिगर्स के कई पंक्ति-स्तर का समर्थन करता है, जहां वे सदैव डिफ़ॉल्ट सारणी परिवर्तनों के अतिरिक्त होते हैं, एवं ट्रिगर का क्रम एक-दूसरे को निर्दिष्ट किया जा सकता है जहां यह अस्पष्ट होगा (POSITION क्लॉज।) ट्रिगर दृश्यों पर भी उपस्थित हो सकते हैं, जहां वे सदैव ट्रिगर के अतिरिक्त डिफ़ॉल्ट अद्यतन योग्य दृश्य तर्क को प्रतिस्थापित करते हैं। (संस्करण 2.1 से पूर्व, डिफ़ॉल्ट लॉजिक के साथ-साथ अपडेट किए जाने योग्य माने जाने वाले दृश्यों पर ट्रिगर चलेंगे।)
 
फायरबर्ड म्यूटेटिंग टेबल अपवाद (ओरेकल की तरह) नहीं उठाता है, और ट्रिगर्स डिफ़ॉल्ट रूप से नेस्ट और रिकर्स दोनों की आवश्यकता होती है (एसक्यूएल सर्वर नेस्टिंग की अनुमति देता है, लेकिन डिफ़ॉल्ट रूप से रिकर्सन नहीं।) फायरबर्ड के ट्रिगर नए और पुराने संदर्भ चर का उपयोग करते हैं (सम्मिलित और हटाए गए टेबल नहीं) ,) और ट्रिगर के वर्तमान उपयोग को इंगित करने के लिए अपडेटिंग, इन्सर्टिंग और डिलीटिंग फ़्लैग प्रदान करें।
 
<वाक्यविन्यास लैंग = एसक्यूएल>
{बनाएं | मनोरंजन | CREATE OR ALTER} TRIGGER नाम के लिए {टेबल नाम | नाम देखें}
[सक्रिय | निष्क्रिय]
{पहले | बाद में}
{डालें [या अद्यतन करें] [या हटाएं] | अद्यतन [या सम्मिलित करें] [या हटाएं] | हटाएं [या अद्यतन] [या सम्मिलित करें]}
[स्थिति एन] ए.एस
शुरू
....
अंत
</वाक्यविन्यास हाइलाइट>


फायरबर्ड म्यूटेटिंग टेबल अपवाद (आकाशवाणी के जैसे) नहीं उठाता है, एवं ट्रिगर्स डिफ़ॉल्ट रूप से नेस्ट एवं रिकर्स दोनों की आवश्यकता होती है (एसक्यूएल सर्वर नेस्टिंग की अनुमति देता है, किन्तु डिफ़ॉल्ट रूप से रिकर्सन नहीं।) फायरबर्ड के ट्रिगर नए एवं प्राचीन संदर्भ परिचारक का उपयोग करते हैं (सम्मिलित एवं विस्थापित किये गए टेबल नहीं) एवं ट्रिगर के वर्तमान उपयोग को प्रदर्शित करने के लिए अपडेटिंग, इन्सर्टिंग एवं डिलीटिंग फ़्लैग प्रदान करते है।
  {CREATE | RECREATE | CREATE OR ALTER} TRIGGER name FOR {table name | view name}[ACTIVE | INACTIVE]
  {BEFORE | AFTER}
  {INSERT [OR UPDATE] [OR DELETE] | UPDATE [OR INSERT] [OR DELETE] | DELETE [OR UPDATE] [OR INSERT] }
  [POSITION n] AS
BEGIN
  ....
END
संस्करण 2.1 के अनुसार, फायरबर्ड अतिरिक्त रूप से निम्नलिखित डेटाबेस-स्तरीय ट्रिगर्स का समर्थन करता है:
संस्करण 2.1 के अनुसार, फायरबर्ड अतिरिक्त रूप से निम्नलिखित डेटाबेस-स्तरीय ट्रिगर्स का समर्थन करता है:


* कनेक्ट करें (यहां उठाए गए अपवाद कनेक्शन को पूरा होने से रोकते हैं)
* कनेक्ट करें (यहां उठाए गए अपवाद कनेक्शन को पूर्ण होने से बाधित करते है)
* डिस्कनेक्ट करें
* डिस्कनेक्ट करें
* लेन-देन प्रारंभ
* लेन-देन प्रारंभ
* ट्रांज़ैक्शन कमिट (यहाँ उठाए गए अपवाद लेनदेन को कमिट करने से रोकते हैं, या दो-चरण की कमिटमेंट शामिल होने पर तैयारी करते हैं)
* ट्रांज़ैक्शन कमिट (यहाँ उठाए गए अपवाद लेनदेन को कमिट करने से बाधित होता हैं, या दो-चरण की कमिटमेंट सम्मलित होने पर आयोजन करते हैं)
* लेनदेन रोलबैक
* लेनदेन रोलबैक


डेटाबेस-स्तरीय ट्रिगर मल्टी-टेबल बाधाओं को लागू करने में मदद कर सकते हैं, या भौतिक विचारों का अनुकरण कर सकते हैं। यदि ट्रांज़ेक्शन कमिट ट्रिगर में एक अपवाद उठाया जाता है, तो ट्रिगर द्वारा अब तक किए गए परिवर्तन वापस ले लिए जाते हैं और क्लाइंट एप्लिकेशन को अधिसूचित किया जाता है, लेकिन लेनदेन सक्रिय रहता है जैसे कि COMMIT का कभी अनुरोध नहीं किया गया था; क्लाइंट एप्लिकेशन परिवर्तन करना जारी रख सकता है और COMMIT का पुनः अनुरोध कर सकता है।
डेटाबेस-स्तरीय ट्रिगर मल्टी-टेबल बाधाओं को आरम्भ करने में सहायता कर सकते हैं, या भौतिक विचारों का अनुकरण कर सकते हैं। यदि ट्रांज़ेक्शन कमिट ट्रिगर में अपवाद उठाया जाता है, तो ट्रिगर द्वारा अब तक किए गए परिवर्तन वापस ले लिए जाते हैं एवं क्लाइंट एप्लिकेशन को अधिसूचित किया जाता है, किन्तु आदान-प्रदान सक्रिय रहता है जैसे कि कमिट (COMMIT) का कभी अनुरोध नहीं किया गया था; क्लाइंट एप्लिकेशन परिवर्तन करना निरंतर रख सकता है एवं कमिट (COMMIT) का पुनः अनुरोध कर सकता है।


डेटाबेस ट्रिगर्स के लिए सिंटैक्स:
डेटाबेस ट्रिगर्स के लिए सिंटैक्स:
  {CREATE | RECREATE | CREATE OR ALTER} TRIGGER name[ACTIVE | INACTIVE] ON
  {CONNECT | DISCONNECT | TRANSACTION START | TRANSACTION COMMIT | TRANSACTION ROLLBACK}
  [POSITION n] AS
BEGIN
  .....
END


<वाक्यविन्यास लैंग = एसक्यूएल>
=== माईएसक्यूएल/मारिया डीबी ===
{बनाएं | मनोरंजन | CREATE OR ALTER} ट्रिगर नाम
माईएसक्यूएल/मारिया डीबी डीबीएमएस में ट्रिगर्स के लिए सीमित समर्थन माईएसक्यूएल (MySQL) के 5.0 संस्करण में सम्मिलित किया गया था, जिसे 2005 में प्रारम्भ किया गया था।<ref>MySQL 5.0 Reference Manual. [https://downloads.mysql.com/docs/refman-5.0-en.pdf "Triggers. MySQL 5.0 added limited support for triggers"], ''[[Oracle Corporation]]'', Retrieved on 4 March 2020.</ref> संस्करण 8.0 के अनुसार, वे डीडीएल (DDL) (डेटा परिवर्तित भाषा) ट्रिगर्स एवं DML (डेटा मैनीपुलेशन भाषा) ट्रिगर्स के लिए अनुमति देते हैं। वे ट्रिगर्स को परिभाषित करने के लिए किसी भी प्रकार के डीडीएल ट्रिगर (पूर्व या पश्चात) का उपयोग करने की अनुमति देते हैं। वे क्लॉज क्रिएट ट्रिगर का उपयोग करके बनाए गए हैं एवं क्लॉज ड्रॉप ट्रिगर का उपयोग करके विस्थापित कर दिए गए हैं। किसी प्रोग्राम के घटित होने पर कहे जाने वाले कथन को प्रत्येक पंक्ति के लिए क्लॉज के पश्चात परिभाषित किया जाता है, उसके पश्चात कीवर्ड (निर्णीत या प्रारम्भ) होता है, जो प्रदर्शित करता है कि क्या क्रमशः अभिव्यक्ति या कथन है।<ref>{{Cite web|url=https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html|title = MySQL :: MySQL 8.0 Reference Manual :: 25.3.1 Trigger Syntax and Examples}}</ref>
  [सक्रिय | निष्क्रिय] पर
{कनेक्ट | डिस्कनेक्ट | लेन-देन प्रारंभ | लेन-देन कमिट | लेन-देन रोलबैक}
[स्थिति एन] ए.एस
शुरू
.....
अंत
</वाक्यविन्यास हाइलाइट>


=== MySQL/MariaDB ===
MySQL/MariaDB DBMS में ट्रिगर्स के लिए सीमित समर्थन MySQL के 5.0 संस्करण में जोड़ा गया था, जिसे 2005 में लॉन्च किया गया था।<ref>MySQL 5.0 Reference Manual. [https://downloads.mysql.com/docs/refman-5.0-en.pdf "Triggers.  MySQL 5.0 added limited support for triggers"], ''[[Oracle Corporation]]'', Retrieved on 4 March 2020.</ref> संस्करण 8.0 के अनुसार, वे DDL (डेटा डेफिनिशन लैंग्वेज) ट्रिगर्स और DML (डेटा मैनीपुलेशन लैंग्वेज) ट्रिगर्स के लिए अनुमति देते हैं। वे ट्रिगर्स को परिभाषित करने के लिए किसी भी प्रकार के डीडीएल ट्रिगर (AFTER या BEFORE) का उपयोग करने की अनुमति देते हैं। वे क्लॉज क्रिएट ट्रिगर का उपयोग करके बनाए गए हैं और क्लॉज DROP TRIGGER का उपयोग करके हटा दिए गए हैं। किसी ईवेंट के घटित होने पर कहे जाने वाले कथन को प्रत्येक पंक्ति के लिए क्लॉज के बाद परिभाषित किया जाता है, उसके बाद एक कीवर्ड (SET या BEGIN) होता है, जो इंगित करता है कि क्या क्रमशः एक अभिव्यक्ति या एक कथन है।<ref>{{Cite web|url=https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html|title = MySQL :: MySQL 8.0 Reference Manual :: 25.3.1 Trigger Syntax and Examples}}</ref>


=== आईबीएम डीबी2 एलयूडब्ल्यू ===
एलयूडब्ल्यू (LUW) के लिए डीबी2 (DB2) के रूप में ज्ञात वितरित प्रणाली के लिए आईबीएम डीबी2 (एलयूडब्ल्यू का अर्थ है लिनक्स, यूनिक्स, विंडो) तीन ट्रिगर प्रकारों का समर्थन करता है: ट्रिगर से पूर्व, ट्रिगर के पश्चात एवं ट्रिगर के अतिरिक्त कथन स्तर एवं पंक्ति स्तर ट्रिगर दोनों समर्थित हैं। यदि टेबल पर चिकित्सा के लिए अधिक ट्रिगर हैं तो ट्रिगर निर्माण डेटा द्वारा फायरिंग आदेश निर्धारित किया जाता है। चूंकि संस्करण 9.7 आईबीएम डीबी2 [[स्वायत्त लेनदेन|स्वाधीनता आदान-प्रदान]] का समर्थन करता है।<ref>{{Cite web|url=http://www.ibm.com/developerworks/data/library/techarticle/dm-0907autonomoustransactions/index.html|title=Autonomous transactions|date=July 30, 2009|website=www.ibm.com}}</ref>ट्रिगर से पूर्व डेटा का अन्वेषण करने एवं यह निश्चित करने के लिए है कि क्या चिकित्सा की अनुमति दी जानी चाहिए। यदि ट्रिगर से पूर्व निर्देश मुक्त किया जाता है तो चिकित्सा निरस्त कर दी जाती है एवं कोई डेटा परिवर्तित नहीं किया जाता है। डीबी2 में पूर्व ट्रिगर्स केवल पढ़ने के लिए होते हैं— आप पूर्व ट्रिगर्स में डेटा को संशोधित नहीं कर सकते हैं। ट्रिगर्स को पोस्ट प्रोसेसिंग के लिए डिज़ाइन किए जाने के पश्चात अनुरोध किए गए परिवर्तन के पश्चात किया गया था। ट्रिगर्स के पश्चात डेटा को टेबल में लिख सकते हैं एवं कुछ के विपरीत अन्य डेटाबेस आप किसी भी सारणी में लिख सकते हैं जिसमें सारणी सम्मिलित है जिस पर ट्रिगर संचालित होता है। ट्रिगर्स के अतिरिक्त विचारों को लिखने योग्य बनाने के लिए हैं।


=== आईबीएम DB2 LUW ===
ट्रिगर सामान्यतः [[SQL PL|एसक्यूएल पीएल]] भाषा में प्रोग्राम किए जाते हैं।
LUW के लिए DB2 के रूप में ज्ञात वितरित सिस्टम के लिए IBM DB2 (LUW का अर्थ है Linux, Unix, Windows) तीन ट्रिगर प्रकारों का समर्थन करता है: ट्रिगर से पहले, ट्रिगर के बाद और ट्रिगर के बजाय। कथन स्तर और पंक्ति स्तर ट्रिगर दोनों समर्थित हैं। यदि टेबल पर एक ही ऑपरेशन के लिए अधिक ट्रिगर हैं तो ट्रिगर निर्माण डेटा द्वारा फायरिंग ऑर्डर निर्धारित किया जाता है। चूंकि संस्करण 9.7 IBM DB2 [[स्वायत्त लेनदेन]] का समर्थन करता है।<ref>{{Cite web|url=http://www.ibm.com/developerworks/data/library/techarticle/dm-0907autonomoustransactions/index.html|title=Autonomous transactions|date=July 30, 2009|website=www.ibm.com}}</ref>
ट्रिगर से पहले डेटा की जाँच करने और यह तय करने के लिए है कि क्या ऑपरेशन की अनुमति दी जानी चाहिए। यदि ट्रिगर से पहले अपवाद फेंका जाता है तो ऑपरेशन निरस्त कर दिया जाता है और कोई डेटा नहीं बदला जाता है। DB2 में बिफोर ट्रिगर्स केवल पढ़ने के लिए होते हैं — आप बिफोर ट्रिगर्स में डेटा को संशोधित नहीं कर सकते हैं। ट्रिगर्स को पोस्ट प्रोसेसिंग के लिए डिज़ाइन किए जाने के बाद अनुरोध किए गए परिवर्तन के बाद किया गया था। ट्रिगर्स के बाद डेटा को टेबल में लिख सकते हैं और कुछ के विपरीत{{Which|date=June 2012}} अन्य डेटाबेस आप किसी भी तालिका में लिख सकते हैं जिसमें तालिका शामिल है जिस पर ट्रिगर संचालित होता है। ट्रिगर्स के बजाय विचारों को लिखने योग्य बनाने के लिए हैं।


ट्रिगर आमतौर पर [[SQL PL]] भाषा में प्रोग्राम किए जाते हैं।
=== [[SQLite|एसक्यूलाइट]] ===
CREATE [TEMP | TEMPORARY] TRIGGER [IF NOT EXISTS] [database_name .] trigger_name[BEFORE | AFTER | INSTEAD OF] {DELETE | INSERT | UPDATE [OF column_name [, column_name]...]}
ON {table_name | view_name}
    [FOR EACH ROW] [WHEN condition is mandatory ]
BEGIN
    ...
END
एसक्यूलाइट केवल पंक्ति-स्तरीय ट्रिगर्स का समर्थन करता है, कथन-लेवल ट्रिगर्स का समर्थन नहीं करता है।


=== [[SQLite]] ===
[[अद्यतन करने योग्य दृश्य]], जो एसक्यूलाइट में समर्थित को  ट्रिगर्स के साथ अनुकरण किया जा सकता है।


<वाक्यविन्यास लैंग = एसक्यूएल>
=== एक्सएमएल डेटाबेस ===
बनाएँ [अस्थायी | अस्थायी] ट्रिगर [यदि मौजूद नहीं है] [डेटाबेस_नाम।] ट्रिगर_नाम
अन्य-संबंधपरक डेटाबेस में ट्रिगर्स के कार्यान्वयन का उदाहरण [[बैठ गया (डेटाबेस)|सेडना (डेटाबेस)]] हो सकता है, जो एक्सक्वेरी ([[XQuery|XQuery)]] पर आधारित ट्रिगर्स के लिए समर्थन प्रदान करता है। सेडना में ट्रिगर्स को एसक्यूएल: 2003 ट्रिगर्स के अनुरूप निर्मित किया गया था, किन्तु मूल रूप से एक्सएमएल क्वेरी एवं अद्यतन भाषा ([[XPath|एक्सपाथ]], स्क्वेरी एवं एक्सएमएल अद्यतन भाषा) पर आधारित था।
[पहले | के बाद | के बजाय] {हटाएं | सम्मिलित करें | अद्यतन [स्तंभ_नाम [, स्तंभ_नाम]...]}
{टेबल_नाम | पर view_name}
  [प्रत्येक पंक्ति के लिए] [जब शर्त अनिवार्य हो]
शुरू
  ...
अंत </ सिंटैक्स हाइलाइट>


SQLite केवल पंक्ति-स्तरीय ट्रिगर्स का समर्थन करता है, स्टेटमेंट-लेवल ट्रिगर्स का नहीं।
सेडना में ट्रिगर डेटाबेस में संग्रहीत एक्सएमएल प्रपत्र के किसी भी नोड पर स्थित होता है। जब इन नोड्स को अद्यतन किया जाता है, तो ट्रिगर स्वचालित रूप से एक्सक्वेरी प्रश्नों एवं उसके शरीर में निर्दिष्ट अपडेट को निष्पादित करता है। उदाहरण के लिए, निम्न ट्रिगर व्यक्ति नोड विलोपन को निरस्त कर देता हैI
    CREATE TRIGGER "trigger3"


[[अद्यतन करने योग्य दृश्य]], जो SQLite में समर्थित नहीं हैं, को INSTEAD OF ट्रिगर्स के साथ अनुकरण किया जा सकता है।
    BEFORE DELETE
    ON doc("auction")/site//person
    FOR EACH NODE
    DO
    {
        if (exists($WHERE//open_auction/bidder/personref/@person=$OLD/@id))
        then ( )
        else $OLD;
    }


=== एक्सएमएल डेटाबेस ===
== पंक्ति एवं कथन स्तर ट्रिगर ==
गैर-संबंधपरक डेटाबेस में ट्रिगर्स के कार्यान्वयन का एक उदाहरण [[बैठ गया (डेटाबेस)]] हो सकता है, जो [[XQuery]] पर आधारित ट्रिगर्स के लिए समर्थन प्रदान करता है। Sedna में ट्रिगर्स को SQL:2003 ट्रिगर्स के अनुरूप डिजाइन किया गया था, लेकिन मूल रूप से XML क्वेरी और अपडेट लैंग्वेज ([[XPath]], XQuery और XML अपडेट लैंग्वेज) पर आधारित था।
यह ज्ञात करने के लिए कि ट्रिगर व्यवहार कैसे कार्य करता है, आपको दो मुख्य प्रकार के ट्रिगर्स के विषय में जानकारी प्राप्त होनी चाहिए, ये रो एवं कथन लेवल ट्रिगर हैं। दोनों के मध्य का अंतर यह है कि ट्रिगर के अंदर कोड को कितनी बार एवं किस समय निष्पादित किया जाता है।


सेडना में एक ट्रिगर डेटाबेस में संग्रहीत XML दस्तावेज़ के किसी भी नोड पर सेट होता है। जब इन नोड्स को अपडेट किया जाता है, तो ट्रिगर स्वचालित रूप से XQuery प्रश्नों और उसके शरीर में निर्दिष्ट अपडेट को निष्पादित करता है। उदाहरण के लिए, यदि इस व्यक्ति द्वारा संदर्भित कोई खुली नीलामी होती है, तो निम्न ट्रिगर व्यक्ति नोड विलोपन को रद्द कर देता है:
मान लीजिए कि आपके पास ट्रिगर है जिसे किसी निश्चित सारणी में अद्यतन पर आह्वान करने के लिए बनाया गया है। अद्यतन से प्रभावित होने वाली प्रत्येक पंक्ति के लिए पंक्ति स्तर ट्रिगर निष्पादित होंगे। यह ध्यान रखना महत्वपूर्ण है कि यदि अद्यतन (UPDATE) कमांड से कोई पंक्ति प्रभावित नहीं होती है, तो ट्रिगर के अंदर किसी भी कोड को निष्पादित नहीं करेगा। अद्यतन से कितनी पंक्तियाँ प्रभावित हैं, इस पर ध्यान दिए बिना कथन लेवल ट्रिगर्स का आह्वान किया जाएगा। यहां यह ध्यान रखना महत्वपूर्ण है कि भले ही अद्यतन कमांड किसी भी पंक्ति को प्रभावित न करे, तथापि ट्रिगर के अंदर कोड को निष्पादित किया जाएगा।
<वाक्यविन्यास लैंग = xql>
ट्रिगर ट्रिगर बनाएं3
    हटाने से पहले
    ऑन डॉक (नीलामी)/साइट//व्यक्ति
    प्रत्येक नोड के लिए
    करना
    {
        अगर (मौजूद है ($ WHERE // open_auction / बोली लगाने वाला / व्यक्ति रेफरी / @ व्यक्ति = $ पुराना / @ आईडी))
        तब ( )
        वरना $पुराना;
    }
</वाक्यविन्यास हाइलाइट>


== पंक्ति और कथन स्तर ट्रिगर ==
पूर्व एवं पश्चात के विकल्पों का उपयोग करके<ref>{{Cite web|url=https://docs.oracle.com/cd/B25329_01/doc/appdev.102/b25108/xedev_triggers.htm|title=6 Using Triggers|website=docs.oracle.com}}</ref> निर्धारित करें कि ट्रिगर कब कहा जाता है। मान लीजिए कि आपके पास ट्रिगर है जिसे इन्सर्ट पर निश्चित सारणी में कहा जाता है। यदि आपका ट्रिगर पूर्व विकल्प का उपयोग कर रहा है, तो सारणी में इन्सर्ट होने से पूर्व ट्रिगर के अंदर कोड निष्पादित किया जाएगा। पूर्व ट्रिगर का सामान्य उपयोग इन्सर्ट के इनपुट मानों को सत्यापित करना है, या तदनुसार मानों को संशोधित करना है। अब मान लें कि हमारे पास ट्रिगर है जो इसके अतिरिक्त आफ्टर का उपयोग करता है। सारणी में इन्सर्ट होने के पश्चात ट्रिगर के अंदर कोड निष्पादित किया जाता है। इस ट्रिगर का उदाहरण उपयोग किए गए परिवर्तनों का ट्रैक रखते हुए, डेटाबेस में किसने प्रविष्टियां की हैं, इसकी प्रक्रिया इतिहास बना रही है। इन विकल्पों का उपयोग करते समय आपको कुछ कथनो का ध्यान रखना होगा। पूर्व विकल्प सारणी को संशोधित करने की अनुमति नहीं देता है, यही कारण है कि इनपुट सत्यापन व्यावहारिक उपयोग है। ट्रिगर्स के पश्चात का उपयोग करने से ऑडिट इतिहास सारणी में चिह्नित करने जैसी सारणी को संशोधित कर सकते हैं।
यह समझने के लिए कि ट्रिगर व्यवहार कैसे काम करता है, आपको दो मुख्य प्रकार के ट्रिगर्स के बारे में पता होना चाहिए; ये रो और स्टेटमेंट लेवल ट्रिगर हैं। दोनों के बीच का अंतर यह है कि ट्रिगर के भीतर कोड को कितनी बार और किस समय निष्पादित किया जाता है।


मान लीजिए कि आपके पास एक ट्रिगर है जिसे किसी निश्चित तालिका में अद्यतन पर कॉल करने के लिए बनाया गया है। अद्यतन से प्रभावित होने वाली प्रत्येक पंक्ति के लिए पंक्ति स्तर ट्रिगर एक बार निष्पादित होंगे। यह ध्यान रखना महत्वपूर्ण है कि यदि UPDATE कमांड से कोई पंक्ति प्रभावित नहीं होती है, तो ट्रिगर ट्रिगर के भीतर किसी भी कोड को निष्पादित नहीं करेगा। UPDATE से कितनी पंक्तियाँ प्रभावित हैं, इस पर ध्यान दिए बिना स्टेटमेंट लेवल ट्रिगर्स को एक बार कॉल किया जाएगा। यहां यह ध्यान रखना महत्वपूर्ण है कि भले ही UPDATE कमांड किसी भी पंक्ति को प्रभावित न करे, फिर भी ट्रिगर के भीतर कोड को एक बार निष्पादित किया जाएगा।
यह निर्धारित करने के लिए ट्रिगर बनाते समय कि क्या यह कथन या पंक्ति स्तर है, केवल पंक्ति स्तर के लिए प्रत्येक पंक्ति के लिए खंड सम्मिलित करें, या कथन स्तर के लिए खंड को त्याग दें। ट्रिगर के अतिरिक्त इन्सर्ट (एसक्यूएल)/अपडेट (एसक्यूएल)/[[हटाएं (एसक्यूएल)|विस्थापित (एसक्यूएल)]] कमांड का उपयोग करने से सावधान रहें, क्योंकि ट्रिगर रिकर्सन (कंप्यूटर विज्ञान) संभव है, जिससे अनुचित व्यवहार होता है। नीचे दिए गए उदाहरणों में प्रत्येक ट्रिगर भिन्न सारणी को संशोधित कर रहा है, जो संशोधित किया जा रहा है, उसे देखकर कुछ सामान्य अनुप्रयोगों को देख सकते हैं जब विभिन्न ट्रिगर प्रकारों का उपयोग किया जाता है।


पहले और बाद के विकल्पों का उपयोग करना<ref>{{Cite web|url=https://docs.oracle.com/cd/B25329_01/doc/appdev.102/b25108/xedev_triggers.htm|title=6 Using Triggers|website=docs.oracle.com}}</ref> निर्धारित करें कि ट्रिगर कब कहा जाता है। मान लीजिए कि आपके पास एक ट्रिगर है जिसे INSERT पर एक निश्चित तालिका में कहा जाता है। यदि आपका ट्रिगर पहले विकल्प का उपयोग कर रहा है, तो तालिका में INSERT होने से पहले ट्रिगर के भीतर कोड निष्पादित किया जाएगा। पहले ट्रिगर का एक सामान्य उपयोग INSERT के इनपुट मानों को सत्यापित करना है, या तदनुसार मानों को संशोधित करना है। अब मान लें कि हमारे पास एक ट्रिगर है जो इसके बजाय AFTER का उपयोग करता है। तालिका में INSERT होने के बाद ट्रिगर के भीतर कोड निष्पादित किया जाता है। इस ट्रिगर का एक उदाहरण उपयोग किए गए परिवर्तनों का ट्रैक रखते हुए, डेटाबेस में किसने प्रविष्टियां की हैं, इसका लेखापरीक्षा इतिहास बना रहा है। इन विकल्पों का उपयोग करते समय आपको कुछ बातों का ध्यान रखना होगा। पहले विकल्प आपको तालिकाओं को संशोधित करने की अनुमति नहीं देता है, यही कारण है कि इनपुट सत्यापन एक व्यावहारिक उपयोग है। ट्रिगर्स के बाद का उपयोग करने से आप ऑडिट इतिहास तालिका में डालने जैसी तालिकाओं को संशोधित कर सकते हैं।
निम्नलिखित पंक्ति स्तर ट्रिगर का ओरेकल (Oracle) सिंटैक्स उदाहरण है जिसे प्रभावित प्रत्येक पंक्ति के लिए अद्यतन के पश्चात कहा जाता है। इस ट्रिगर को फोन बुक डेटाबेस के अद्यतन पर आह्वान किया जाता है। जब ट्रिगर का आह्वान किया जाता है तो यह फोन_बुक_ऑडिट नाम की भिन्न सारणी में प्रविष्टि सम्मिलित करता है। स्कीमा ऑब्जेक्ट्स जैसे अनुक्रमों का लाभ उठाने में सक्षम होने वाले ट्रिगर्स पर भी ध्यान दें,<ref>{{Cite web|url=http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm|archive-url=https://web.archive.org/web/20111201225844/http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm|url-status=live|archive-date=2011-12-01|title=Oracle's Documentation on Sequences}}</ref> इस उदाहरण में ऑडियो (audio)_आईडी (id)_ अनुक्रम नेक्सवैल (sequence.nexVal) का उपयोग फोन_बुक_ऑडिट सारणी में अद्वितीय [[प्राथमिक कुंजी]] उत्पन्न करने के लिए किया जाता है।
  CREATE OR REPLACE TRIGGER phone_book_audit


यह निर्धारित करने के लिए ट्रिगर बनाते समय कि क्या यह कथन या पंक्ति स्तर है, केवल पंक्ति स्तर के लिए प्रत्येक पंक्ति के लिए खंड शामिल करें, या कथन स्तर के लिए खंड को छोड़ दें। अपने ट्रिगर के भीतर अतिरिक्त इन्सर्ट (एसक्यूएल)/अपडेट (एसक्यूएल)/[[हटाएं (एसक्यूएल)]] कमांड का उपयोग करने से सावधान रहें, क्योंकि ट्रिगर रिकर्सन (कंप्यूटर साइंस) संभव है, जिससे अवांछित व्यवहार होता है। नीचे दिए गए उदाहरणों में प्रत्येक ट्रिगर एक अलग तालिका को संशोधित कर रहा है, जो संशोधित किया जा रहा है उसे देखकर आप कुछ सामान्य अनुप्रयोगों को देख सकते हैं जब विभिन्न ट्रिगर प्रकारों का उपयोग किया जाता है।
  AFTER UPDATE ON phone_book FOR EACH ROW
BEGIN
  INSERT INTO phone_book_audit
    (audit_id,audit_change, audit_l_name, audit_f_name, audit_old_phone_number, audit_new_phone_number, audit_date)
    VALUES
    (audit_id_sequence.nextVal,'Update', :OLD.last_name, :OLD.first_name, :OLD.phone_number, :NEW.phone_number, SYSDATE);
END;
अब अंतिम नाम 'जोन्स' वाले लोगों के लिए फोन_बुक टेबल पर अपडेट (एसक्यूएल) आह्वान करना।


निम्नलिखित एक पंक्ति स्तर ट्रिगर का Oracle सिंटैक्स उदाहरण है जिसे प्रभावित प्रत्येक पंक्ति के लिए अद्यतन के बाद कहा जाता है। इस ट्रिगर को फोन बुक डेटाबेस के अपडेट पर कॉल किया जाता है। जब ट्रिगर को कॉल किया जाता है तो यह phone_book_audit नाम की एक अलग तालिका में एक प्रविष्टि जोड़ता है। स्कीमा ऑब्जेक्ट्स जैसे अनुक्रमों का लाभ उठाने में सक्षम होने वाले ट्रिगर्स पर भी ध्यान दें,<ref>{{Cite web|url=http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm|archive-url=https://web.archive.org/web/20111201225844/http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_6014.htm|url-status=live|archive-date=2011-12-01|title=Oracle's Documentation on Sequences}}</ref> इस उदाहरण में audio_id_sequence.nexVal का उपयोग phone_book_audit तालिका में अद्वितीय [[प्राथमिक कुंजी]] उत्पन्न करने के लिए किया जाता है।
UPDATE phone_book SET phone_number = '111-111-1111' WHERE last_name = 'Jones';
 
<वाक्यविन्यास प्रकाश लैंग = oracle11>
ट्रिगर फोन_बुक_ऑडिट बनाएं या बदलें
  प्रत्येक पंक्ति के लिए फोनबुक पर अद्यतन के बाद
शुरू
  फोन_बुक_ऑडिट में प्रवेश करें
    (ऑडिट_आईडी, ऑडिट_चेंज, ऑडिट_एल_नाम, ऑडिट_एफ_नाम, ऑडिट_पुराना_फोन_नंबर, ऑडिट_नया_फोन_नंबर, ऑडिट_डेट)
    मान
    (audit_id_sequence.nextVal, 'अपडेट', :OLD.last_name, :OLD.first_name, :OLD.phone_number, :NEW.phone_number, SYSDATE);
अंत;
</वाक्यविन्यास हाइलाइट>
 
अब अंतिम नाम 'जोन्स' वाले लोगों के लिए फोन_बुक टेबल पर अपडेट (एसक्यूएल) कॉल करना।
<वाक्यविन्यास प्रकाश लैंग = oracle11>
अद्यतन फोन_बुक सेट फोन_नंबर = '111-111-1111' जहां अंतिम_नाम = 'जोन्स';
</वाक्यविन्यास हाइलाइट>


{| class="wikitable"
{| class="wikitable"
|-
|-
! Audit_ID !! Audit_Change !! F_Name !! L_Name !! New_Phone_Number !! Old_Phone_Number !! Audit_Date
! ऑडिट_आईडी !! ऑडिट_परिवर्तन !! F_Name !! L_Name !! नया_फोन_नंबर !! पुराना_फोन_नंबर !! ऑडिट_डेट
|-
|-
| 1 || Update || Jordan || Jones || 111-111-1111 || 098-765-4321 || 02-MAY-14
| 1 ||अपडेट
|जॉर्डन
|जोन्स
| 111-111-1111 || 098-765-4321 ||02-मई-14
|-
|-
| 2 || Update || Megan || Jones || 111-111-1111 || 111-222-3456 || 02-MAY-14
| 2 ||अपडेट
|मेगन
|जोन्स
| 111-111-1111 || 111-222-3456 ||02-मई-14
|}
|}
ध्यान दें कि phone_number_audit तालिका अब दो प्रविष्टियों से आबाद है। यह डेटाबेस के साथ दो प्रविष्टियों वाले होने के कारण है
ध्यान दें कि फोन_नंबर_ऑडिट सारणी अब दो प्रविष्टियों से संपन्न है। यह डेटाबेस में 'जोन्स' के अंतिम नाम के साथ दो प्रविष्टियों के कारण है। चूंकि अपडेट दो भिन्न-भिन्न पंक्ति मानों को संशोधित करता है, इसलिए बनाए गए ट्रिगर का दो बार आह्वान किया गया था।
'जोन्स' का अंतिम नाम। चूंकि अपडेट दो अलग-अलग पंक्ति मानों को संशोधित करता है, इसलिए बनाए गए ट्रिगर को दो बार कॉल किया गया था; एक बार प्रत्येक संशोधन के बाद।


=== आफ्टर - स्टेटमेंट-लेवल ट्रिगर ===
=== पश्चात-स्टेटमेंट-लेवल ट्रिगर ===
एक Oracle सिंटैक्स स्टेटमेंट ट्रिगर जिसे फोन_बुक तालिका में अद्यतन के बाद कहा जाता है। जब ट्रिगर को कॉल किया जाता है तो यह phone_book_edit_history तालिका में सम्मिलित करता है
ओरेकल सिंटैक्स कथन ट्रिगर जिसे फोन_बुक सारणी में अद्यतन के पश्चात कहा जाता है। जब ट्रिगर का आह्वान किया जाता है तो यह फ़ोन _बुक _एडिट _इतिहास  सारणी में सम्मिलित करता हैI
<वाक्यविन्यास प्रकाश लैंग = oracle11>
   CREATE OR REPLACE TRIGGER phone_book_history
ट्रिगर फोन_बुक_इतिहास बनाएं या बदलें
  फोन_बुक पर अद्यतन के बाद
शुरू
   फोन_बुक_एडिट_इतिहास में प्रवेश करें
    (audit_history_id, उपयोगकर्ता नाम, संशोधन, edit_date)
    मान
    (audit_history_id_sequence.nextVal, USER,'Update', SYSDATE);
अंत;
</वाक्यविन्यास हाइलाइट>


अब उपरोक्त उदाहरण के समान ही अपडेट कर रहे हैं, हालांकि इस बार स्टेटमेंट लेवल ट्रिगर के साथ। <वाक्यविन्यास प्रकाश लैंग = oracle11>
  AFTER UPDATE ON phone_book
अद्यतन फोन_बुक सेट फोन_नंबर = '111-111-1111' जहां अंतिम_नाम = 'जोन्स';
BEGIN
</वाक्यविन्यास हाइलाइट>
  INSERT INTO phone_book_edit_history
    (audit_history_id, username, modification, edit_date)
    VALUES
    (audit_history_id_sequence.nextVal, USER,'Update', SYSDATE);
END;
अब उपरोक्त उदाहरण के समान ही अपडेट कर रहे हैं, चूँकि इस बार कथन लेवल ट्रिगर के साथ होता है।
 
UPDATE phone_book SET phone_number = '111-111-1111' WHERE last_name = 'Jones';


{| class="wikitable"
{| class="wikitable"
|-
|-
! Audit_History_ID !! Username !! Modification !! Edit_Date
!ऑडिट_इतिहास_आईडी
!उपयोगकर्ता नाम
!परिवर्तन
!संपादन की तारीख
|-
|-
| 1 || HAUSCHBC || Update || 02-MAY-14
| 1 || HAUSCHBC ||अपडेट
|02-मई-14
|}
|}
नतीजा दिखाता है कि ट्रिगर को केवल एक बार बुलाया गया था, भले ही अपडेट ने दो पंक्तियों को बदल दिया हो।
परिणाम दर्शाता है कि ट्रिगर को केवल आह्वान किया गया था, तत्प्श्चात अपडेट ने दो पंक्तियों को परिवर्तित कर दिया है।


=== प्रत्येक से पहले - पंक्ति-स्तर ट्रिगर ===
=== प्रत्येक से पूर्व - पंक्ति-स्तर ट्रिगर ===
यह उदाहरण प्रत्येक पंक्ति ट्रिगर से पहले प्रदर्शित करता है जो WHEN सशर्त का उपयोग करके INSERT को संशोधित करता है। यदि अंतिम नाम SUBSTR फ़ंक्शन का उपयोग करके 10 अक्षरों से बड़ा है<ref>{{Cite web|url=https://www.databasestar.com/oracle-sql-functions/|title=Oracle SQL Functions – The Complete List|date=December 26, 2014}}</ref> हम last_name कॉलम मान को संक्षेप में बदलते हैं।
यह उदाहरण प्रत्येक पंक्ति ट्रिगर से पूर्व प्रदर्शित करता है जो व्हेन (WHEN) वचन का उपयोग करके इन्सर्ट (INSERT) को संशोधित करता है। यदि अंतिम नाम सबस्ट्रेट (SUBSTR) प्रोग्राम का उपयोग करके 10 अक्षरों से बड़ा है<ref>{{Cite web|url=https://www.databasestar.com/oracle-sql-functions/|title=Oracle SQL Functions – The Complete List|date=December 26, 2014}}</ref> हम अंतिम_नाम कॉलम मान को संक्षेप में परिवर्तित करते हैं।
  CREATE OR REPLACE TRIGGER phone_book_insert


<वाक्यविन्यास प्रकाश लैंग = oracle11>
  BEFORE INSERT ON phone_book FOR EACH ROW
TRIGGER phone_book_insert बनाएं या बदलें
  WHEN (LENGTH(new.last_name) > 10)
  प्रत्येक पंक्ति के लिए फोन_बुक पर डालने से पहले
BEGIN
  WHEN (LENGTH(new.last_name) > 10)
    :new.last_name := SUBSTR(:new.last_name,0,1);
शुरू
END;
    :new.last_name := SUBSTR(:new.last_name,0,1);
अब बड़े नाम वाले किसी व्यक्ति का इन्सर्ट (INSERT) कर रहे हैं।
अंत;
  INSERT INTO phone_book VALUES
</वाक्यविन्यास हाइलाइट>
 
अब बड़े नाम वाले किसी व्यक्ति का INSERT कर रहे हैं।
<वाक्यविन्यास प्रकाश लैंग = oracle11>
फोन_बुक मूल्यों में प्रवेश करें
(6, 'VeryVeryLongLastName', 'Erin', 'Minneapolis', 'MN', '989 यूनिवर्सिटी ड्राइव', '123-222-4456', 55408, TO_DATE('11/21/1991', 'MM/DD/ YYYY'));
</वाक्यविन्यास हाइलाइट>


(6, 'VeryVeryLongLastName', 'Erin', 'Minneapolis', 'MN', '989 University Drive', '123-222-4456', 55408, TO_DATE('11/21/1991', 'MM/DD/YYYY'));
{| class="wikitable"
{| class="wikitable"
|-
|-
! Person_ID !! Last_Name !! First_Name !! City !! State_Abbreviation !! Address !! Phone_Number !! Zip_code !! DOB
!व्यक्ति_आईडी
!अंतिम_नाम
!प्रथम_नाम
!शहर
!राज्य_संक्षेप
!पता
!फ़ोन_नंबर
!ज़िप_कोड
!जन्म तिथि
|-
|-
| 6 || V || Erin || Minneapolis || MN || 989 University Drive || 123-222-4456 || 55408 || 21-NOV-91
| 6 ||वी
|आयलैंड
|मिनीपोलिस
|एमएन
|989 यूनिवर्सिटी ड्राइव
| 123-222-4456 || 55408 ||21-नवंबर-91
|}
|}
ट्रिगर ने उपरोक्त परिणाम के अनुसार काम किया, INSERT के मान को निष्पादित करने से पहले संशोधित किया।
ट्रिगर ने उपरोक्त परिणाम के अनुसार कार्य किया, इन्सर्ट के मान को निष्पादित करने से पूर्व संशोधित किया।


=== पहले - स्टेटमेंट-लेवल ट्रिगर ===
=== पूर्व -कथन-लेवल ट्रिगर ===
डेटाबेस प्रतिबंधों को लागू करते समय BEFORE स्टेटमेंट ट्रिगर का उपयोग करना विशेष रूप से उपयोगी होता है।<ref>{{Cite web|url=https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_trigger.htm|title=Database PL/SQL Language Reference|website=docs.oracle.com}}</ref> यह उदाहरण प्रदर्शित करता है कि तालिका phone_book पर SOMEUSER नाम के किसी व्यक्ति पर प्रतिबंध कैसे लागू किया जाए।
डेटाबेस प्रतिबंधों को प्रारम्भ करते समय पूर्व कथन ट्रिगर का उपयोग करना विशेष रूप से उपयोगी होता है।<ref>{{Cite web|url=https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/create_trigger.htm|title=Database PL/SQL Language Reference|website=docs.oracle.com}}</ref> यह उदाहरण प्रदर्शित करता है कि सारणी फोन_बुक पर किसी उपयोगकर्ता नाम पर प्रतिबंध कैसे प्रारम्भ किया जाए।


<वाक्यविन्यास प्रकाश लैंग = oracle11>
   CREATE OR REPLACE TRIGGER hauschbc
ट्रिगर हॉशबीसी बनाएं या बदलें
   SOMEUSER.phone_book पर डालने से पहले
शुरू
    RAISE_APPLICATION_ERROR (
        संख्या => -20050,
        संदेश => 'त्रुटि संदेश यहां जाता है।');
अंत;
</वाक्यविन्यास हाइलाइट>


अब, जब किसी INSERT का प्रयास करने के बाद SOMEUSER लॉग इन होता है तो यह त्रुटि संदेश दिखाई देगा:
  BEFORE INSERT ON SOMEUSER.phone_book
BEGIN
    RAISE_APPLICATION_ERROR (
          num => -20050,
          msg => 'Error message goes here.');
END;
अब, जब किसी इन्सर्ट का प्रयास करने के पश्चात किसी उपयोगकर्ता पर लॉग इन होता है तो यह त्रुटि संदेश दिखाई देगा:


  SQL त्रुटि: ORA-20050: त्रुटि संदेश यहाँ जाता है।
  SQL Error: ORA-20050: Error message goes here.


इस तरह की कस्टम त्रुटियां इस बात पर प्रतिबंध लगाती हैं कि संख्या चर को किस रूप में परिभाषित किया जा सकता है। कई अन्य पूर्व-निर्धारित त्रुटियों के कारण यह चर -20000 से -20999 की सीमा में होना चाहिए।
इस प्रकार की कस्टम त्रुटियां इस कथन पर प्रतिबंध लगाती हैं कि संख्या चर को किस रूप में परिभाषित किया जा सकता है। कई अन्य पूर्व-निर्धारित त्रुटियों के कारण यह चर -20000 से -20999 की सीमा में होना चाहिए।


==संदर्भ==
==संदर्भ==
Line 268: Line 259:
*[http://www.sqlite.org/lang_createtrigger.html SQLite Query Language: CREATE TRIGGER]
*[http://www.sqlite.org/lang_createtrigger.html SQLite Query Language: CREATE TRIGGER]
*[http://docs.oracle.com/cd/B19306_01/server.102/b14220/triggers.htm#i2013 Oracle's Documentation on Triggers]
*[http://docs.oracle.com/cd/B19306_01/server.102/b14220/triggers.htm#i2013 Oracle's Documentation on Triggers]
{{Databases}}


{{DEFAULTSORT:Database Trigger}}
{{DEFAULTSORT:Database Trigger}}
<!--Categories-->[[Category: डेटाबेस प्रबंधन तंत्र]] [[Category: घटनाएँ (कंप्यूटिंग)]] [[Category: SQL कोड उदाहरण के साथ लेख]]  
[[Category:Collapse templates|Database Trigger]]
 
[[Category:Created On 16/02/2023|Database Trigger]]
 
[[Category:Database management systems|Database Trigger]]
 
[[Category:Machine Translated Page|Database Trigger]]
[[Category: Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Created On 16/02/2023]]
[[Category:Navigational boxes without horizontal lists|Database Trigger]]
[[Category:Pages with script errors|Database Trigger]]
[[Category:SQL कोड उदाहरण के साथ लेख|Database Trigger]]
[[Category:Sidebars with styles needing conversion|Database Trigger]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Database Trigger]]
[[Category:Templates generating microformats|Database Trigger]]
[[Category:Templates that are not mobile friendly|Database Trigger]]
[[Category:Templates using TemplateData|Database Trigger]]
[[Category:Wikipedia metatemplates|Database Trigger]]
[[Category:घटनाएँ (कंप्यूटिंग)|Database Trigger]]
[[Category:डेटाबेस प्रबंधन तंत्र|Database Trigger]]

Latest revision as of 15:24, 27 October 2023

डेटाबेस ट्रिगर प्रक्रियात्मक कोड है जो किसी विशेष सारणी (डेटाबेस) या डेटाबेस में देखने (डेटाबेस) पर कुछ प्रोग्राम (कंप्यूटिंग) का उत्तर में स्वचालित रूप से निष्पादित करता है। ट्रिगर का उपयोग अधिकतम डेटाबेस पर जानकारी की डेटाबेस अखंडता को बनाए रखने के लिए किया जाता है। उदाहरण के लिए, जब कर्मचारियों की सारणी में नया रिकॉर्ड (नए कार्यकर्ता का प्रतिनिधित्व) सम्मिलित किया जाता है, अवकाश एवं वेतन की सारणी में भी नए रिकॉर्ड बनाए जाने चाहिए। ट्रिगर का उपयोग ऐतिहासिक डेटा लॉग करने के लिए भी किया जा सकता है, उदाहरण के लिए कर्मचारियों के पूर्व वेतन पर दृष्टि रखने के लिए किया जाता है।

डीबीएमएस में ट्रिगर

नीचे कुछ लोकप्रिय डीबीएमएस समर्थन ट्रिगर्स के विवरण की श्रृंखला दी गई है।

आकाशवाणी

डेटा संशोधित होने पर उस अग्नि प्रकट होने को (एवं पीएल/एसक्यूएल कोड को निष्पादित) ट्रिगर करने के अतिरिक्त, आकाशवाणी डाटाबेस उस ट्रिगर का समर्थन करता है जब स्कीमा-स्तरीय ऑब्जेक्ट्स (अर्थात, टेबल) संशोधित होते हैं और जब उपयोगकर्ता लॉगऑन या लॉगऑफ़ ईवेंट होते हैं।

स्कीमा-लेवल ट्रिगर्स

  • सृष्टि के पश्चात
  • ऑल्टर से पूर्व
  • आल्टर के पश्चात
  • ड्राप से पूर्व
  • ड्राप के पश्चात
  • चिह्नित से पूर्व

चार मुख्य प्रकार के ट्रिगर हैं:

  1. रो-लेवल ट्रिगर: यह किसी पंक्ति परिवर्तन के किसी भी कॉलम मान से पूर्व या पश्चात में निष्पादित हो जाता हैI
  2. कॉलम-स्तरीय ट्रिगर: निर्दिष्ट कॉलम परिवर्तन से पूर्व या पश्चात में इसे निष्पादित किया जाता हैI
  3. प्रत्येक पंक्ति प्रकार के लिए: यह ट्रिगर सम्मिलित/अद्यतन/विस्थापित किये जाने से प्रभावित परिणाम दृढ़ की प्रत्येक पंक्ति के लिए निष्पादित हो जाता हैI
  4. प्रत्येक कथन प्रकार के लिए: यह ट्रिगर सम्पूर्ण परिणाम दृढ़ के लिए केवल निष्पादित होता है, किन्तु कथन के निष्पादित होने पर भी अग्नि प्रकट हो जाती है।

प्रणाली स्तरीय ट्रिगर्स

Oracle8i से, डेटाबेस प्रोग्राम- लॉगऑन, लॉगऑफ़, स्टार्टअप- आकाशवाणी ट्रिगर्स को सक्रिय कर सकते हैं।[1]

माइक्रोसॉफ्ट एसक्यूएल सर्वर

डीडीएल ट्रिगर्स के लिए माइक्रोसॉफ्ट एसक्यूएल सर्वर में सभी उपलब्ध फायरिंग इवेंट्स की सूची माइक्रोसॉफ्ट एसक्यूएल पर उपलब्ध है।[2]

अस्थायी सम्मिलित एवं विस्थापित किये गए सारणी तक पहुँचने के माध्यम से ट्रिगर्स (या संशोधन के पश्चात डेटा का परीक्षण) में नियमबद्ध क्रियाएं करना।

पोस्टग्रेएसक्यूएल

1997 में ट्रिगर्स के लिए समर्थन प्रस्तुत किया गया, एसक्यूएल: 2003 में निम्नलिखित कार्यक्षमता पूर्व पोस्टग्रेएसक्यूएल में प्रारम्भ नहीं की गई थी:

  • एसक्यूएल ट्रिगर्स को विशिष्ट कॉलम के अद्यतन पर अग्नि प्रकट करने की अनुमति देता है; पोस्टग्रेएसक्यूएल के संस्करण 9.0 के रूप में यह सुविधा पोस्टग्रेएसक्यूएल में भी प्रारम्भ की गई है।
  • मानक सेलेक्ट (एसक्यूएल), इन्सर्ट (एसक्यूएल), अद्यतन (एसक्यूएल) के अतिरिक्त कई एसक्यूएल कथन के निष्पादन की अनुमति देता है, जैसे क्रिएट टेबल को ट्रिगर कार्य के रूप में, यह क्रिएट टेबल को संबोधन करने के लिए संग्रहीत कार्यविधि या कार्यक्रम बनाकर किया जा सकता है।[3]

सार:

 CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] }
    ON TABLE [ FOR [ EACH ] { ROW | STATEMENT } ]
    EXECUTE PROCEDURE funcname ( arguments )

फायरबर्ड

फ़ायरबर्ड (डेटाबेस सर्वर) प्रति टेबल ट्रिगर्स से पूर्व या पश्चात में, सम्मिलित करें (INSERT), अद्यतन करें (UPDATE), विस्थापित (DELETE) (या इसके किसी भी संयोजन) ट्रिगर्स के कई पंक्ति-स्तर का समर्थन करता है, जहां वे सदैव डिफ़ॉल्ट सारणी परिवर्तनों के अतिरिक्त होते हैं, एवं ट्रिगर का क्रम एक-दूसरे को निर्दिष्ट किया जा सकता है जहां यह अस्पष्ट होगा (POSITION क्लॉज।) ट्रिगर दृश्यों पर भी उपस्थित हो सकते हैं, जहां वे सदैव ट्रिगर के अतिरिक्त डिफ़ॉल्ट अद्यतन योग्य दृश्य तर्क को प्रतिस्थापित करते हैं। (संस्करण 2.1 से पूर्व, डिफ़ॉल्ट लॉजिक के साथ-साथ अपडेट किए जाने योग्य माने जाने वाले दृश्यों पर ट्रिगर चलेंगे।)

फायरबर्ड म्यूटेटिंग टेबल अपवाद (आकाशवाणी के जैसे) नहीं उठाता है, एवं ट्रिगर्स डिफ़ॉल्ट रूप से नेस्ट एवं रिकर्स दोनों की आवश्यकता होती है (एसक्यूएल सर्वर नेस्टिंग की अनुमति देता है, किन्तु डिफ़ॉल्ट रूप से रिकर्सन नहीं।) फायरबर्ड के ट्रिगर नए एवं प्राचीन संदर्भ परिचारक का उपयोग करते हैं (सम्मिलित एवं विस्थापित किये गए टेबल नहीं) एवं ट्रिगर के वर्तमान उपयोग को प्रदर्शित करने के लिए अपडेटिंग, इन्सर्टिंग एवं डिलीटिंग फ़्लैग प्रदान करते है।

 {CREATE | RECREATE | CREATE OR ALTER} TRIGGER name FOR {table name | view name}[ACTIVE | INACTIVE]
 {BEFORE | AFTER}
 {INSERT [OR UPDATE] [OR DELETE] | UPDATE [OR INSERT] [OR DELETE] | DELETE [OR UPDATE] [OR INSERT] }
 [POSITION n] AS
BEGIN
 ....
END

संस्करण 2.1 के अनुसार, फायरबर्ड अतिरिक्त रूप से निम्नलिखित डेटाबेस-स्तरीय ट्रिगर्स का समर्थन करता है:

  • कनेक्ट करें (यहां उठाए गए अपवाद कनेक्शन को पूर्ण होने से बाधित करते है)
  • डिस्कनेक्ट करें
  • लेन-देन प्रारंभ
  • ट्रांज़ैक्शन कमिट (यहाँ उठाए गए अपवाद लेनदेन को कमिट करने से बाधित होता हैं, या दो-चरण की कमिटमेंट सम्मलित होने पर आयोजन करते हैं)
  • लेनदेन रोलबैक

डेटाबेस-स्तरीय ट्रिगर मल्टी-टेबल बाधाओं को आरम्भ करने में सहायता कर सकते हैं, या भौतिक विचारों का अनुकरण कर सकते हैं। यदि ट्रांज़ेक्शन कमिट ट्रिगर में अपवाद उठाया जाता है, तो ट्रिगर द्वारा अब तक किए गए परिवर्तन वापस ले लिए जाते हैं एवं क्लाइंट एप्लिकेशन को अधिसूचित किया जाता है, किन्तु आदान-प्रदान सक्रिय रहता है जैसे कि कमिट (COMMIT) का कभी अनुरोध नहीं किया गया था; क्लाइंट एप्लिकेशन परिवर्तन करना निरंतर रख सकता है एवं कमिट (COMMIT) का पुनः अनुरोध कर सकता है।

डेटाबेस ट्रिगर्स के लिए सिंटैक्स:

 {CREATE | RECREATE | CREATE OR ALTER} TRIGGER name[ACTIVE | INACTIVE] ON
 {CONNECT | DISCONNECT | TRANSACTION START | TRANSACTION COMMIT | TRANSACTION ROLLBACK}
 [POSITION n] AS
BEGIN
 .....
END

माईएसक्यूएल/मारिया डीबी

माईएसक्यूएल/मारिया डीबी डीबीएमएस में ट्रिगर्स के लिए सीमित समर्थन माईएसक्यूएल (MySQL) के 5.0 संस्करण में सम्मिलित किया गया था, जिसे 2005 में प्रारम्भ किया गया था।[4] संस्करण 8.0 के अनुसार, वे डीडीएल (DDL) (डेटा परिवर्तित भाषा) ट्रिगर्स एवं DML (डेटा मैनीपुलेशन भाषा) ट्रिगर्स के लिए अनुमति देते हैं। वे ट्रिगर्स को परिभाषित करने के लिए किसी भी प्रकार के डीडीएल ट्रिगर (पूर्व या पश्चात) का उपयोग करने की अनुमति देते हैं। वे क्लॉज क्रिएट ट्रिगर का उपयोग करके बनाए गए हैं एवं क्लॉज ड्रॉप ट्रिगर का उपयोग करके विस्थापित कर दिए गए हैं। किसी प्रोग्राम के घटित होने पर कहे जाने वाले कथन को प्रत्येक पंक्ति के लिए क्लॉज के पश्चात परिभाषित किया जाता है, उसके पश्चात कीवर्ड (निर्णीत या प्रारम्भ) होता है, जो प्रदर्शित करता है कि क्या क्रमशः अभिव्यक्ति या कथन है।[5]


आईबीएम डीबी2 एलयूडब्ल्यू

एलयूडब्ल्यू (LUW) के लिए डीबी2 (DB2) के रूप में ज्ञात वितरित प्रणाली के लिए आईबीएम डीबी2 (एलयूडब्ल्यू का अर्थ है लिनक्स, यूनिक्स, विंडो) तीन ट्रिगर प्रकारों का समर्थन करता है: ट्रिगर से पूर्व, ट्रिगर के पश्चात एवं ट्रिगर के अतिरिक्त कथन स्तर एवं पंक्ति स्तर ट्रिगर दोनों समर्थित हैं। यदि टेबल पर चिकित्सा के लिए अधिक ट्रिगर हैं तो ट्रिगर निर्माण डेटा द्वारा फायरिंग आदेश निर्धारित किया जाता है। चूंकि संस्करण 9.7 आईबीएम डीबी2 स्वाधीनता आदान-प्रदान का समर्थन करता है।[6]ट्रिगर से पूर्व डेटा का अन्वेषण करने एवं यह निश्चित करने के लिए है कि क्या चिकित्सा की अनुमति दी जानी चाहिए। यदि ट्रिगर से पूर्व निर्देश मुक्त किया जाता है तो चिकित्सा निरस्त कर दी जाती है एवं कोई डेटा परिवर्तित नहीं किया जाता है। डीबी2 में पूर्व ट्रिगर्स केवल पढ़ने के लिए होते हैं— आप पूर्व ट्रिगर्स में डेटा को संशोधित नहीं कर सकते हैं। ट्रिगर्स को पोस्ट प्रोसेसिंग के लिए डिज़ाइन किए जाने के पश्चात अनुरोध किए गए परिवर्तन के पश्चात किया गया था। ट्रिगर्स के पश्चात डेटा को टेबल में लिख सकते हैं एवं कुछ के विपरीत अन्य डेटाबेस आप किसी भी सारणी में लिख सकते हैं जिसमें सारणी सम्मिलित है जिस पर ट्रिगर संचालित होता है। ट्रिगर्स के अतिरिक्त विचारों को लिखने योग्य बनाने के लिए हैं।

ट्रिगर सामान्यतः एसक्यूएल पीएल भाषा में प्रोग्राम किए जाते हैं।

एसक्यूलाइट

CREATE [TEMP | TEMPORARY] TRIGGER [IF NOT EXISTS] [database_name .] trigger_name[BEFORE | AFTER | INSTEAD OF] {DELETE | INSERT | UPDATE [OF column_name [, column_name]...]} 
ON {table_name | view_name}
   [FOR EACH ROW] [WHEN condition is mandatory ]
BEGIN
   ...
END

एसक्यूलाइट केवल पंक्ति-स्तरीय ट्रिगर्स का समर्थन करता है, कथन-लेवल ट्रिगर्स का समर्थन नहीं करता है।

अद्यतन करने योग्य दृश्य, जो एसक्यूलाइट में समर्थित को ट्रिगर्स के साथ अनुकरण किया जा सकता है।

एक्सएमएल डेटाबेस

अन्य-संबंधपरक डेटाबेस में ट्रिगर्स के कार्यान्वयन का उदाहरण सेडना (डेटाबेस) हो सकता है, जो एक्सक्वेरी (XQuery) पर आधारित ट्रिगर्स के लिए समर्थन प्रदान करता है। सेडना में ट्रिगर्स को एसक्यूएल: 2003 ट्रिगर्स के अनुरूप निर्मित किया गया था, किन्तु मूल रूप से एक्सएमएल क्वेरी एवं अद्यतन भाषा (एक्सपाथ, स्क्वेरी एवं एक्सएमएल अद्यतन भाषा) पर आधारित था।

सेडना में ट्रिगर डेटाबेस में संग्रहीत एक्सएमएल प्रपत्र के किसी भी नोड पर स्थित होता है। जब इन नोड्स को अद्यतन किया जाता है, तो ट्रिगर स्वचालित रूप से एक्सक्वेरी प्रश्नों एवं उसके शरीर में निर्दिष्ट अपडेट को निष्पादित करता है। उदाहरण के लिए, निम्न ट्रिगर व्यक्ति नोड विलोपन को निरस्त कर देता हैI

   CREATE TRIGGER "trigger3"
    BEFORE DELETE
    ON doc("auction")/site//person
    FOR EACH NODE
    DO
    {
        if (exists($WHERE//open_auction/bidder/personref/@person=$OLD/@id))
        then ( )
        else $OLD;
    }

पंक्ति एवं कथन स्तर ट्रिगर

यह ज्ञात करने के लिए कि ट्रिगर व्यवहार कैसे कार्य करता है, आपको दो मुख्य प्रकार के ट्रिगर्स के विषय में जानकारी प्राप्त होनी चाहिए, ये रो एवं कथन लेवल ट्रिगर हैं। दोनों के मध्य का अंतर यह है कि ट्रिगर के अंदर कोड को कितनी बार एवं किस समय निष्पादित किया जाता है।

मान लीजिए कि आपके पास ट्रिगर है जिसे किसी निश्चित सारणी में अद्यतन पर आह्वान करने के लिए बनाया गया है। अद्यतन से प्रभावित होने वाली प्रत्येक पंक्ति के लिए पंक्ति स्तर ट्रिगर निष्पादित होंगे। यह ध्यान रखना महत्वपूर्ण है कि यदि अद्यतन (UPDATE) कमांड से कोई पंक्ति प्रभावित नहीं होती है, तो ट्रिगर के अंदर किसी भी कोड को निष्पादित नहीं करेगा। अद्यतन से कितनी पंक्तियाँ प्रभावित हैं, इस पर ध्यान दिए बिना कथन लेवल ट्रिगर्स का आह्वान किया जाएगा। यहां यह ध्यान रखना महत्वपूर्ण है कि भले ही अद्यतन कमांड किसी भी पंक्ति को प्रभावित न करे, तथापि ट्रिगर के अंदर कोड को निष्पादित किया जाएगा।

पूर्व एवं पश्चात के विकल्पों का उपयोग करके[7] निर्धारित करें कि ट्रिगर कब कहा जाता है। मान लीजिए कि आपके पास ट्रिगर है जिसे इन्सर्ट पर निश्चित सारणी में कहा जाता है। यदि आपका ट्रिगर पूर्व विकल्प का उपयोग कर रहा है, तो सारणी में इन्सर्ट होने से पूर्व ट्रिगर के अंदर कोड निष्पादित किया जाएगा। पूर्व ट्रिगर का सामान्य उपयोग इन्सर्ट के इनपुट मानों को सत्यापित करना है, या तदनुसार मानों को संशोधित करना है। अब मान लें कि हमारे पास ट्रिगर है जो इसके अतिरिक्त आफ्टर का उपयोग करता है। सारणी में इन्सर्ट होने के पश्चात ट्रिगर के अंदर कोड निष्पादित किया जाता है। इस ट्रिगर का उदाहरण उपयोग किए गए परिवर्तनों का ट्रैक रखते हुए, डेटाबेस में किसने प्रविष्टियां की हैं, इसकी प्रक्रिया इतिहास बना रही है। इन विकल्पों का उपयोग करते समय आपको कुछ कथनो का ध्यान रखना होगा। पूर्व विकल्प सारणी को संशोधित करने की अनुमति नहीं देता है, यही कारण है कि इनपुट सत्यापन व्यावहारिक उपयोग है। ट्रिगर्स के पश्चात का उपयोग करने से ऑडिट इतिहास सारणी में चिह्नित करने जैसी सारणी को संशोधित कर सकते हैं।

यह निर्धारित करने के लिए ट्रिगर बनाते समय कि क्या यह कथन या पंक्ति स्तर है, केवल पंक्ति स्तर के लिए प्रत्येक पंक्ति के लिए खंड सम्मिलित करें, या कथन स्तर के लिए खंड को त्याग दें। ट्रिगर के अतिरिक्त इन्सर्ट (एसक्यूएल)/अपडेट (एसक्यूएल)/विस्थापित (एसक्यूएल) कमांड का उपयोग करने से सावधान रहें, क्योंकि ट्रिगर रिकर्सन (कंप्यूटर विज्ञान) संभव है, जिससे अनुचित व्यवहार होता है। नीचे दिए गए उदाहरणों में प्रत्येक ट्रिगर भिन्न सारणी को संशोधित कर रहा है, जो संशोधित किया जा रहा है, उसे देखकर कुछ सामान्य अनुप्रयोगों को देख सकते हैं जब विभिन्न ट्रिगर प्रकारों का उपयोग किया जाता है।

निम्नलिखित पंक्ति स्तर ट्रिगर का ओरेकल (Oracle) सिंटैक्स उदाहरण है जिसे प्रभावित प्रत्येक पंक्ति के लिए अद्यतन के पश्चात कहा जाता है। इस ट्रिगर को फोन बुक डेटाबेस के अद्यतन पर आह्वान किया जाता है। जब ट्रिगर का आह्वान किया जाता है तो यह फोन_बुक_ऑडिट नाम की भिन्न सारणी में प्रविष्टि सम्मिलित करता है। स्कीमा ऑब्जेक्ट्स जैसे अनुक्रमों का लाभ उठाने में सक्षम होने वाले ट्रिगर्स पर भी ध्यान दें,[8] इस उदाहरण में ऑडियो (audio)_आईडी (id)_ अनुक्रम नेक्सवैल (sequence.nexVal) का उपयोग फोन_बुक_ऑडिट सारणी में अद्वितीय प्राथमिक कुंजी उत्पन्न करने के लिए किया जाता है।

 CREATE OR REPLACE TRIGGER phone_book_audit
  AFTER UPDATE ON phone_book FOR EACH ROW
BEGIN
  INSERT INTO phone_book_audit 
    (audit_id,audit_change, audit_l_name, audit_f_name, audit_old_phone_number, audit_new_phone_number, audit_date) 
    VALUES
    (audit_id_sequence.nextVal,'Update', :OLD.last_name, :OLD.first_name, :OLD.phone_number, :NEW.phone_number, SYSDATE);
END;

अब अंतिम नाम 'जोन्स' वाले लोगों के लिए फोन_बुक टेबल पर अपडेट (एसक्यूएल) आह्वान करना।

UPDATE phone_book SET phone_number = '111-111-1111' WHERE last_name = 'Jones';

ऑडिट_आईडी ऑडिट_परिवर्तन F_Name L_Name नया_फोन_नंबर पुराना_फोन_नंबर ऑडिट_डेट
1 अपडेट जॉर्डन जोन्स 111-111-1111 098-765-4321 02-मई-14
2 अपडेट मेगन जोन्स 111-111-1111 111-222-3456 02-मई-14

ध्यान दें कि फोन_नंबर_ऑडिट सारणी अब दो प्रविष्टियों से संपन्न है। यह डेटाबेस में 'जोन्स' के अंतिम नाम के साथ दो प्रविष्टियों के कारण है। चूंकि अपडेट दो भिन्न-भिन्न पंक्ति मानों को संशोधित करता है, इसलिए बनाए गए ट्रिगर का दो बार आह्वान किया गया था।

पश्चात-स्टेटमेंट-लेवल ट्रिगर

ओरेकल सिंटैक्स कथन ट्रिगर जिसे फोन_बुक सारणी में अद्यतन के पश्चात कहा जाता है। जब ट्रिगर का आह्वान किया जाता है तो यह फ़ोन _बुक _एडिट _इतिहास सारणी में सम्मिलित करता हैI

 CREATE OR REPLACE TRIGGER phone_book_history
  AFTER UPDATE ON phone_book
BEGIN
  INSERT INTO phone_book_edit_history 
    (audit_history_id, username, modification, edit_date) 
    VALUES
    (audit_history_id_sequence.nextVal, USER,'Update', SYSDATE);
END;

अब उपरोक्त उदाहरण के समान ही अपडेट कर रहे हैं, चूँकि इस बार कथन लेवल ट्रिगर के साथ होता है।

UPDATE phone_book SET phone_number = '111-111-1111' WHERE last_name = 'Jones';

ऑडिट_इतिहास_आईडी उपयोगकर्ता नाम परिवर्तन संपादन की तारीख
1 HAUSCHBC अपडेट 02-मई-14

परिणाम दर्शाता है कि ट्रिगर को केवल आह्वान किया गया था, तत्प्श्चात अपडेट ने दो पंक्तियों को परिवर्तित कर दिया है।

प्रत्येक से पूर्व - पंक्ति-स्तर ट्रिगर

यह उदाहरण प्रत्येक पंक्ति ट्रिगर से पूर्व प्रदर्शित करता है जो व्हेन (WHEN) वचन का उपयोग करके इन्सर्ट (INSERT) को संशोधित करता है। यदि अंतिम नाम सबस्ट्रेट (SUBSTR) प्रोग्राम का उपयोग करके 10 अक्षरों से बड़ा है[9] हम अंतिम_नाम कॉलम मान को संक्षेप में परिवर्तित करते हैं।

 CREATE OR REPLACE TRIGGER phone_book_insert
  BEFORE INSERT ON phone_book FOR EACH ROW
  WHEN (LENGTH(new.last_name) > 10)
BEGIN
    :new.last_name := SUBSTR(:new.last_name,0,1);
END;

अब बड़े नाम वाले किसी व्यक्ति का इन्सर्ट (INSERT) कर रहे हैं।

  INSERT INTO phone_book VALUES
(6, 'VeryVeryLongLastName', 'Erin', 'Minneapolis', 'MN', '989 University Drive', '123-222-4456', 55408, TO_DATE('11/21/1991', 'MM/DD/YYYY'));
व्यक्ति_आईडी अंतिम_नाम प्रथम_नाम शहर राज्य_संक्षेप पता फ़ोन_नंबर ज़िप_कोड जन्म तिथि
6 वी आयलैंड मिनीपोलिस एमएन 989 यूनिवर्सिटी ड्राइव 123-222-4456 55408 21-नवंबर-91

ट्रिगर ने उपरोक्त परिणाम के अनुसार कार्य किया, इन्सर्ट के मान को निष्पादित करने से पूर्व संशोधित किया।

पूर्व -कथन-लेवल ट्रिगर

डेटाबेस प्रतिबंधों को प्रारम्भ करते समय पूर्व कथन ट्रिगर का उपयोग करना विशेष रूप से उपयोगी होता है।[10] यह उदाहरण प्रदर्शित करता है कि सारणी फोन_बुक पर किसी उपयोगकर्ता नाम पर प्रतिबंध कैसे प्रारम्भ किया जाए।

 CREATE OR REPLACE TRIGGER hauschbc 
  BEFORE INSERT ON SOMEUSER.phone_book
BEGIN
    RAISE_APPLICATION_ERROR (
         num => -20050,
         msg => 'Error message goes here.');
END;

अब, जब किसी इन्सर्ट का प्रयास करने के पश्चात किसी उपयोगकर्ता पर लॉग इन होता है तो यह त्रुटि संदेश दिखाई देगा:

SQL Error: ORA-20050: Error message goes here.

इस प्रकार की कस्टम त्रुटियां इस कथन पर प्रतिबंध लगाती हैं कि संख्या चर को किस रूप में परिभाषित किया जा सकता है। कई अन्य पूर्व-निर्धारित त्रुटियों के कारण यह चर -20000 से -20999 की सीमा में होना चाहिए।

संदर्भ

  1. Nanda, Arup; Burleson, Donald K. (2003). "9". In Burleson, Donald K. (ed.). Oracle Privacy Security Auditing: Includes Federal Law Compliance with HIPAA, Sarbanes Oxley and the Gramm Leach Bliley Act GLB. Oracle in-focus series. Vol. 47. Kittrell, North Carolina: Rampant TechPress. p. 511. ISBN 9780972751391. Retrieved 2018-04-17. [...] system-level triggers [...] were introduced in Oracle8i. [...] system-level triggers are fired at specific system events such as logon, logoff, database startup, DDL execution, and servererror [...].
  2. "DDL Events - SQL Server".
  3. "PostgreSQL: Documentation: 9.0: CREATE TRIGGER". www.postgresql.org. 8 October 2015.
  4. MySQL 5.0 Reference Manual. "Triggers. MySQL 5.0 added limited support for triggers", Oracle Corporation, Retrieved on 4 March 2020.
  5. "MySQL :: MySQL 8.0 Reference Manual :: 25.3.1 Trigger Syntax and Examples".
  6. "Autonomous transactions". www.ibm.com. July 30, 2009.
  7. "6 Using Triggers". docs.oracle.com.
  8. "Oracle's Documentation on Sequences". Archived from the original on 2011-12-01.
  9. "Oracle SQL Functions – The Complete List". December 26, 2014.
  10. "Database PL/SQL Language Reference". docs.oracle.com.


बाहरी संबंध