Database trigger
ڈیٹا بیس ٹرگر ایک طرز عمل کا کوڈ ہے جو کسی خاص ٹیبل پر کچھ واقعات یا ڈیٹا بیس میں دیکھنے کے جواب میں خود بخود انجام دیا جاتا ہے۔ ٹرگر زیادہ تر ڈیٹا بیس پر موجود معلومات کی سالمیت کو برقرار رکھنے کے لیے استعمال ہوتا ہے۔ مثال کے طور پر، جب ملازمین کی میز پر ایک نیا ریکارڈ (ایک نئے کارکن کی نمائندگی کرنے والا) شامل کیا جاتا ہے، تو ٹیکس، چھٹیوں اور تنخواہوں کی میزوں میں بھی نئے ریکارڈ بنائے جانے چاہئیں۔ ٹرگرز کو تاریخی ڈیٹا لاگ ان کرنے کے لیے بھی استعمال کیا جا سکتا ہے، مثال کے طور پر ملازمین کی پچھلی تنخواہوں پر نظر رکھنے کے لیے۔ ڈی بی ایم ایس میں محرکات ذیل میں وضاحتوں کے ایک سلسلے کی پیروی کرتے ہیں کہ کس طرح کچھ مشہور ڈی بی ایم ایس سپورٹ محرک ہوتے ہیں۔ اوریکل اس آگ کو متحرک کرنے کے علاوہ (اور پی ایل/ایس کیو ایل کوڈ پر عمل درآمد) جب ڈیٹا میں ترمیم کی جاتی ہے، اوریکل 10 جی اس آگ کو متحرک کرنے کی حمایت کرتا ہے جب اسکیما سطح کی اشیاء (یعنی ٹیبلز) میں ترمیم کی جاتی ہے اور جب صارف لاگ ان یا لاگ آف کے واقعات ہوتے ہیں۔ سکیما لیول ٹرگرز تخلیق کے بعد تبدیلی سے پہلے تبدیلی کے بعد ڈراپ کے بعد ڈراپ کرنے سے پہلے چار اہم قسم کے ٹرگرز یہ ہیں: قطار کی سطح کا ٹرگر: یہ کسی بھی کالم کی قدر سے پہلے یا بعد میں کالم کی سطح کے ٹرگر کو تبدیل کرتا ہے: یہ مخصوص کالم کی تبدیلیوں سے پہلے یا بعد میں انجام دیا جاتا ہے۔ ہر صف کی قسم کے لیے: یہ ٹرگر داخل/اپ ڈیٹ/ڈیلیٹ سے متاثر نتیجہ سیٹ کی ہر صف کے لیے ایک بار انجام دیا جاتا ہے۔ ہر بیان کی قسم کے لیے: یہ ٹرگر پورے نتیجہ سیٹ کے لیے صرف ایک بار انجام دیا جاتا ہے، لیکن ہر بار بیان پر عمل درآمد ہونے پر فائر بھی ہوتا ہے۔ سسٹم کی سطح کے محرکات اوریکل 8i سے، ڈیٹا بیس کے واقعات-لاگون، لاگ آف، اسٹارٹ اپ-اوریکل محرکات کو فائر کر سکتے ہیں۔ مائیکروسافٹ ایس کیو ایل سرور ڈی ڈی ایل ٹرگرز کے لیے مائیکروسافٹ ایس کیو ایل سرور میں موجود تمام فائرنگ ایونٹس کی فہرست مائیکروسافٹ ڈاکس پر دستیاب ہے۔ ٹرگرز میں مشروط اقدامات انجام دینا (یا ترمیم کے بعد ڈیٹا کی جانچ) عارضی طور پر داخل اور حذف شدہ ٹیبلز تک رسائی کے ذریعے کیا جاتا ہے۔ پوسٹگری ایس کیو ایل نے 1997 میں ٹرگرز کے لیے سپورٹ متعارف کرایا۔ ایس کیو ایل میں درج ذیل فعالیت: 2003 کو پہلے پوسٹگری ایس کیو ایل میں نافذ نہیں کیا گیا تھا: ایس کیو ایل محرکات کو مخصوص کالموں کی اپ ڈیٹس پر فائر کرنے کی اجازت دیتا ہے۔ پوسٹگری ایس کیو ایل کے ورژن 9 کے مطابق یہ خصوصیت پوسٹگری ایس کیو ایل میں بھی نافذ کی گئی ہے۔ معیار سلیکٹ، انسرٹ، اپ ڈیٹ کے علاوہ متعدد ایس کیو ایل بیانات پر عمل درآمد کی اجازت دیتا ہے، جیسے کہ کریٹ ٹیبل بطور محرک عمل۔ یہ کریٹ ٹیبل کو کال کرنے کے لیے ایک ذخیرہ شدہ طریقہ کار یا فنکشن بنا کر کیا جا سکتا ہے۔ خلاصہ: ٹیبل پر ٹریگر کا نام {BEFORE | AFTER} {ایونٹ [OR.]] بنائیں [[ہر ایک کے لیے] [ROW | STATEMENT] EXECUTE PROCEEDURE فنک نام (دلائل) فائر برڈ ایک سے زیادہ صف کی سطح کی حمایت کرتا ہے، پہلے یا بعد میں، INSERT، UPDATE، DELETE (یا اس کا کوئی مجموعہ) فی ٹیبل ٹرگرز، جہاں وہ ہمیشہ ڈیفالٹ ٹیبل تبدیلیوں کے علاوہ ہوتے ہیں، اور ایک دوسرے سے متعلق ٹرگرز کی ترتیب کی وضاحت کی جا سکتی ہے جہاں یہ بصورت دیگر مبہم ہوگا (پوزیشن شق)۔ ویوز پر ٹرگرز بھی موجود ہو سکتے ہیں، جہاں وہ ہمیشہ "بجائے" ٹرگرز ہوتے ہیں، جو ڈیفالٹ اپڈیٹیبل ویو منطق کی جگہ لیتے ہیں۔ (ورژن 2.1 سے پہلے، اپڈیٹ ایبل سمجھے جانے والے ویوز پر محرکات ڈیفالٹ منطق کے علاوہ چلتے ہیں۔) فائر برڈ میوٹیٹنگ ٹیبل کے استثناء (جیسے اوریکل) کو نہیں بڑھاتا ہے، اور محرکات پہلے سے طے شدہ طور پر گھونسلے اور ضرورت کے مطابق دوبارہ کام کریں گے (ایس کیو ایل سرور پہلے سے طے شدہ طور پر گھونسلے بنانے کی اجازت دیتا ہے لیکن دوبارہ کام نہیں کرتا ہے۔) فائر برڈ کے محرکات نئے اور پرانے سیاق و سباق کے متغیرات کا استعمال کرتے ہیں (ٹیبل داخل اور حذف نہیں کیے گئے) اور محرک کے موجودہ استعمال کی نشاندہی کرنے کے لیے اپ ڈیٹنگ، انسرٹنگ اور ڈیلیٹنگ پرچم فراہم کرتے ہیں۔ {CREATE | RECRIATE | CREATE OR ALTER} ٹرائگر کا نام {ٹیبل کا نام | ویو نام] [ACTIVE | INACTIVE] {BEFORE | AFTER} {INSERT [OR UPDATE] [OR DELETE] | UPDATE [OR INSERT] [OR DELETE] | DELETE [OR UPDATE] [OR INSERT]] [POSITIN N] جیسا کہ شروع ہوتا ہے۔ ورژن 2.1 کے مطابق، فائر برڈ مندرجہ ذیل ڈیٹا بیس سطح کے محرکات کی اضافی حمایت کرتا ہے: رابطہ (یہاں اٹھائے گئے مستثنیات کنکشن کو مکمل ہونے سے روکتے ہیں) اگر ٹرانزیکشن کمیشن ٹرگر میں کوئی رعایت اٹھائی جاتی ہے، تو ٹرگر کی طرف سے اب تک کی گئی تبدیلیاں واپس لے لی جاتی ہیں اور کلائنٹ کی درخواست کو مطلع کیا جاتا ہے، لیکن لین دین فعال رہتا ہے گویا کہ کبھی بھی کمیشن کی درخواست نہیں کی گئی تھی۔ کلائنٹ کی درخواست تبدیلیاں کرنا اور دوبارہ کمیشن کی درخواست کرنا جاری رکھ سکتی ہے۔ ڈیٹا بیس ٹرگرز کے لیے نحو: {CREATE | RECREATE | CREATE or ALTER} ٹرائگر کا نام [ACTIVE | INACTIVE] آن {CONNNECT | DISCONNNNECT | TRANSACTIN START | TRANSACTIN COMMMIT | TRANSACTIN ROLLBACK} [POSITIN n] جیسا کہ شروع ہو رہا ہے۔ مائی ایس کیو ایل/ماریا ڈی بی ڈی بی ایم ایس میں ٹرگرز کے لیے اینڈ مائی ایس کیو ایل/ماریا ڈی بی لمیٹڈ سپورٹ کو مائی ایس کیو ایل کے 5 ورژن میں شامل کیا گیا تھا، جسے 2005 میں لانچ کیا گیا تھا۔ ورژن 8 تک، وہ ڈی ڈی ایل (ڈیٹا ڈیفینیشن لینگویج) ٹرگرز اور ڈی ایم ایل (ڈیٹا مینیپولیشن لینگویج) ٹرگرز کی اجازت دیتے ہیں۔ وہ ٹرگرز کی وضاحت کے لیے کسی بھی قسم کے ڈی ڈی ایل ٹرگر (بعد میں یا پہلے) کو استعمال کرنے کی بھی اجازت دیتے ہیں۔ وہ CREATE TRIGER شق کا استعمال کرتے ہوئے بنائے جاتے ہیں اور DROP TRIGER شق کا استعمال کرتے ہوئے حذف کیے جاتے ہیں۔ کسی واقعہ کے بارے میں جس بیان کا مطالبہ کیا جاتا ہے اس کی وضاحت شق FOR EACH ROW کے بعد کی جاتی ہے، اس کے بعد ایک کلیدی لفظ (SET یا BEGIN) ہوتا ہے، جو اس بات کی نشاندہی کرتا ہے کہ مندرجہ ذیل بالترتیب ایک اظہار ہے یا بیان۔ تقسیم شدہ سسٹمز کے لیے IBM DB2 جسے LUW کے لیے DB2 کے نام سے جانا جاتا ہے (LUW کا مطلب لینکس، یونکس، ونڈوز ہے) تین ٹرگر اقسام کی حمایت کرتا ہے: ٹرگر سے پہلے، ٹرگر کے بعد اور ٹرگر کے بجائے۔ بیان کی سطح اور صف کی سطح کے محرکات دونوں کی حمایت کی جاتی ہے۔ اگر میز پر ایک ہی آپریشن کے لیے مزید محرکات ہیں تو فائرنگ آرڈر کا تعین محرک تخلیق ڈیٹا کے ذریعے کیا جاتا ہے۔ ورژن 9.7 سے آئی بی ایم ڈی بی 2 خود مختار لین دین کی حمایت کرتا ہے۔ ٹرگر سے پہلے ڈیٹا کی جانچ پڑتال اور یہ فیصلہ کرنا ہے کہ آیا آپریشن کی اجازت دی جانی چاہیے۔ اگر ٹرگر سے پہلے سے رعایت پھینک دی جاتی ہے تو آپریشن کو روک دیا جاتا ہے اور کوئی ڈیٹا تبدیل نہیں کیا جاتا ہے۔ ڈی بی 2 میں ٹرگرز کو صرف پڑھنے سے پہلے-آپ ٹرگرز سے پہلے ڈیٹا میں ترمیم نہیں کر سکتے۔ درخواست کردہ تبدیلی انجام دینے کے بعد ٹرگرز کو پوسٹ پروسیسنگ کے لیے ڈیزائن کیا گیا ہے۔ ٹرگرز کے بعد ڈیٹا کو ٹیبلز میں لکھ سکتے ہیں اور کچھ دوسرے ڈیٹا بیس کے برعکس آپ کسی بھی ٹیبل میں لکھ سکتے ہیں بشمول ٹیبل جس پر ٹرگر کام کرتا ہے۔ محرکات کے بجائے خیالات کو قابل تحریر بنانے کے لیے ہوتے ہیں۔ محرکات عام طور پر ایس کیو ایل پی ایل زبان میں پروگرام کیے جاتے ہیں۔ SQLite CREATE [TEMP | TEMPORARY] TRIGGER [اگر موجود نہیں ہے] [ڈیٹا بیس _ نام۔] ٹرگر _ نام [BEFORE | AFTER | INSTEAD OF] {DELETE | INSERT | UPDATE [OF کالم _ نام [، کالم _ نام].]} آن {ٹیبل _ نام | ویو _ نام} [ہر ROW کے لیے] [جب شرط لازمی ہے] شروع کریں۔ اینڈ SQLite صرف قطار کی سطح کے ٹرگرز کی حمایت کرتا ہے، بیان کی سطح کے ٹرگرز کی نہیں۔ تازہ ترین ویوز، جو SQLite میں سپورٹ نہیں ہیں، کو انسٹاڈ آف ٹرگرز کے ساتھ نقل کیا جا سکتا ہے۔ ایکس ایم ایل ڈیٹا بیس غیر رشتہ دار ڈیٹا بیس میں محرکات کے نفاذ کی ایک مثال سیڈنا ہو سکتی ہے، جو ایکس کوری پر مبنی محرکات کے لیے مدد فراہم کرتی ہے۔ سیڈنا میں محرکات کو ایس کیو ایل: 2003 محرکات سے مشابہت رکھنے کے لیے ڈیزائن کیا گیا تھا، لیکن یہ مقامی طور پر ایکس ایم ایل استفسار اور اپ ڈیٹ زبانوں (ایکس پیتھ، ایکس کوری اور ایکس ایم ایل اپ ڈیٹ زبان) پر مبنی تھے۔ سیڈنا میں ایک ٹرگر ڈیٹا بیس میں محفوظ ایکس ایم ایل دستاویز کے کسی بھی نوڈس پر سیٹ کیا جاتا ہے۔ جب ان نوڈس کو اپ ڈیٹ کیا جاتا ہے، تو ٹرگر خود بخود اپنے جسم میں مخصوص XQuery سوالات اور اپ ڈیٹس کو انجام دیتا ہے۔ مثال کے طور پر، اگر اس شخص کی طرف سے کوئی کھلی نیلامی کا حوالہ دیا گیا ہے تو درج ذیل ٹرگر پرسن نوڈ کو حذف کر دیتا ہے: ہر کام کے لیے دستاویز ("نیلامی")/سائٹ// شخص کو حذف کرنے سے پہلے ٹریگر "ٹرگر 3" بنائیں (اگر موجود ہے ($WHERE// open _ auction/bidder/personref/@person = $OLD/@id) پھر () دوسرے $OLD ؛} صف اور بیان کی سطح کے محرکات یہ سمجھنے کے لیے کہ محرک کا طرز عمل کیسے کام کرتا ہے، آپ کو دو اہم قسم کے محرکات سے آگاہ ہونے کی ضرورت ہے۔ یہ صف اور بیان کی سطح کے محرکات ہیں۔ دونوں کے درمیان فرق یہ ہے کہ ٹرگر کے اندر کوڈ کو کتنی بار پھانسی دی جاتی ہے، اور کس وقت۔ فرض کریں کہ آپ کے پاس ایک ٹرگر ہے جسے کسی مخصوص میز پر اپ ڈیٹ پر کال کرنے کے لیے بنایا گیا ہے۔ قطار کی سطح کے محرکات اپ ڈیٹ سے متاثر ہونے والی ہر قطار کے لیے ایک بار انجام دیں گے۔ یہ ذہن میں رکھنا ضروری ہے کہ اگر اپ ڈیٹ کمانڈ سے کوئی قطاریں متاثر نہیں ہوتی ہیں، تو ٹرگر ٹرگر کے اندر کسی بھی کوڈ کو انجام نہیں دے گا۔ بیان کی سطح کے محرکات کو ایک بار کال کیا جائے گا اس بات سے قطع نظر کہ اپ ڈیٹ سے کتنی قطاریں متاثر ہوتی ہیں۔ یہاں یہ نوٹ کرنا ضروری ہے کہ یہاں تک کہ اگر اپ ڈیٹ کمانڈ نے کسی قطار کو متاثر نہیں کیا، تب بھی ٹرگر کے اندر موجود کوڈ کو ایک بار پھانسی دی جائے گی۔ BEFORE اور AFTER آپشنز کا استعمال کرتے ہوئے طے کریں کہ ٹرگر کو کب کال کیا جاتا ہے۔ فرض کریں کہ آپ کے پاس ایک ٹرگر ہے جسے INSERT پر کسی مخصوص میز پر بلایا جاتا ہے۔ اگر آپ کا ٹرگر BEFORE آپشن استعمال کر رہا ہے، تو ٹرگر کے اندر موجود کوڈ کو ٹیبل میں INSERT آنے سے پہلے عمل میں لایا جائے گا۔ BEFORE ٹرگر کا ایک عام استعمال INSERT کی ان پٹ ویلیوز کی تصدیق کرنا، یا اس کے مطابق ویلیوز میں ترمیم کرنا ہے۔ اب فرض کریں کہ ہمارے پاس ایک ٹرگر ہے جو اس کے بجائے اے ایف ٹی آر کا استعمال کرتا ہے۔ ٹرگر کے اندر کوڈ کو ٹیبل پر INSERT ہونے کے بعد انجام دیا جاتا ہے۔ اس محرک کا ایک مثال استعمال اس بات کی آڈٹ ہسٹری بنانا ہے کہ کس نے ڈیٹا بیس میں داخل کیا ہے، کی گئی تبدیلیوں پر نظر رکھتے ہوئے۔ ان اختیارات کا استعمال کرتے وقت آپ کو کچھ چیزوں کو ذہن میں رکھنے کی ضرورت ہے۔ BEFORE آپشن آپ کو ٹیبلز میں ترمیم کرنے کی اجازت نہیں دیتا، اسی وجہ سے ان پٹ کی توثیق ایک عملی استعمال ہے۔ اے ایف ٹی آر ٹرگرز کا استعمال آپ کو ٹیبلز میں ترمیم کرنے کی اجازت دیتا ہے جیسے کہ آڈٹ ہسٹری ٹیبل میں ڈالنا۔ اس بات کا تعین کرنے کے لیے کہ آیا یہ بیان ہے یا قطار کی سطح ہے، ٹرگر بناتے وقت صرف قطار کی سطح کے لیے ہر ایک کے لیے شق شامل کریں، یا بیان کی سطح کے لیے شق کو چھوڑ دیں۔ اپنے ٹرگر کے اندر اضافی INSERT/UPDATE/DELETE کمانڈز استعمال کرنے سے محتاط رہیں، کیونکہ ٹرگر ریکرشن ممکن ہے، جس کی وجہ سے ناپسندیدہ طرز عمل پیدا ہوتا ہے۔ نیچے دی گئی مثالوں میں ہر ٹرگر ایک مختلف ٹیبل میں ترمیم کر رہا ہے، یہ دیکھ کر کہ کیا ترمیم کی جا رہی ہے آپ کچھ عام ایپلی کیشنز دیکھ سکتے ہیں جب مختلف ٹرگر کی اقسام استعمال کی جاتی ہیں۔ مندرجہ ذیل صف کی سطح کے محرک کی اوریکل نحو کی مثال ہے جسے متاثرہ ہر ROW کے لیے اپ ڈیٹ کے بعد کہا جاتا ہے۔ اس محرک کو فون بک ڈیٹا بیس کی اپ ڈیٹ پر بلایا جاتا ہے۔ جب ٹرگر کو کال کیا جاتا ہے تو یہ فون _ بک _ آڈٹ نامی ایک علیحدہ ٹیبل میں اندراج کا اضافہ کرتا ہے۔ اس بات کو بھی نوٹ کریں کہ محرکات اسکیما آبجیکٹ جیسے سیکوینس سے فائدہ اٹھانے کے قابل ہیں، اس مثال میں audit_id_sequence.nexVal فون _ بک _ آڈٹ ٹیبل میں منفرد پرائمری کیز تیار کرنے کے لیے استعمال ہوتا ہے۔ ہر راستے کے لیے فون بک پر اپ ڈیٹ کرنے کے بعد ٹریگر فون بک آڈٹ بنائیں (آڈٹ آئی ڈی، آڈٹ چینج، آڈٹ ایل نام، آڈٹ ایف نام، آڈٹ اولڈ فون نمبر، آڈٹ نیو فون نمبر، آڈٹ ڈیٹ) ویلیوز (audit_id_sequence.nextVal، 'اپ ڈیٹ'،: OLD.last_name،: OLD.first_name،: OLD.phone_number،: NEW.phone_number، SYSDATE) ؛ اختتام ؛ اب آخری نام 'جونز' والے لوگوں کے لیے فون بک ٹیبل پر اپ ڈیٹ کال کرنا۔ اپ ڈیٹ فون _ بک سیٹ فون _ نمبر = '111-111-1111' کہاں آخری نام = 'جونز' ؛ نوٹ کریں کہ فون _ نمبر _ آڈٹ ٹیبل اب دو اندراجات سے بھرا ہوا ہے۔ اس کی وجہ یہ ہے کہ ڈیٹا بیس میں 'جونز' کے آخری نام کے ساتھ دو اندراجات ہیں۔ چونکہ اپ ڈیٹ نے دو الگ الگ قطار کی اقدار میں ترمیم کی، اس لیے بنائے گئے ٹرگر کو دو بار کال کیا گیا ؛ ہر ترمیم کے بعد ایک بار۔ بعد-بیان کی سطح کا محرک ایک اوریکل نحو بیان کا محرک جسے فون بک ٹیبل پر اپ ڈیٹ کے بعد بلایا جاتا ہے۔ جب ٹرگر کو کال کیا جاتا ہے تو یہ فون _ بک _ ایڈیٹ _ ہسٹری ٹیبل CREATE یا REPLACE TRIGER فون _ بک _ ہسٹری میں فون _ بک پر اپ ڈیٹ کے بعد داخل کرتا ہے۔ فون _ بک BEGIN INSERT INT فون _ بک _ ایڈیٹ _ ہسٹری (آڈٹ _ ہسٹری _ آئی ڈی، صارف نام، ترمیم، ترمیم _ تاریخ) ویلیوز (audit_history_id_sequence.nextVal، USER، 'اپ ڈیٹ'، SYSSDATE) ؛ اینڈ ؛ اب بالکل وہی اپ ڈیٹ کر رہا ہے جو اوپر کی مثال کے طور پر ہے، تاہم اس بار اسٹیٹمنٹ لیول ٹرگر کے ساتھ۔ اپ ڈیٹ فون بک سیٹ فون نمبر = '111-111-1111' کہاں آخری نام = 'جونز' ؛ نتیجہ سے پتہ چلتا ہے کہ ٹرگر کو صرف ایک بار کال کیا گیا تھا، حالانکہ اپ ڈیٹ نے دو قطاریں تبدیل کیں۔ ہر-قطار کی سطح کے ٹرگر سے پہلے یہ مثال ہر ROW سے پہلے کے ٹرگر کو ظاہر کرتی ہے جو WHEN مشروط کا استعمال کرتے ہوئے INSERT کو تبدیل کرتی ہے۔ اگر آخری نام 10 حروف سے بڑا ہے، تو ایس یو بی ایس ٹی آر فنکشن کا استعمال کرتے ہوئے ہم آخری نام کالم کی قیمت کو مخفف میں تبدیل کرتے ہیں۔ ہر راستے کے لیے فون _ بک پر انسرٹ کرنے سے پہلے فون _ بک _ انسٹر کریں (لمبائی (new.last_name)> 10) شروع کریں: new.last_name: = سبسٹر (: new.last_name، 0,1) ؛ اختتام ؛ اب کسی بڑے نام کے ساتھ انسرٹ انجام دے رہے ہیں۔ INSERT INTO فون _ بک ویلیوز (6، 'VeryVeryLongLastName'، 'ایرن'، 'منیاپولیس'، 'ایم این'، '989 یونیورسٹی ڈرائیو'، '123-222-4456'، 55408، ٹو ڈیٹ ('11/21/1991'، 'ایم ایم/ڈی ڈی/YYYY') ؛ ٹرگر نے اوپر کے نتیجہ کے مطابق کام کیا، اس پر عمل درآمد سے پہلے INSERT کی قیمت میں ترمیم کی۔ بیفور-سٹیٹمنٹ لیول ٹرگر ڈیٹا بیس کی پابندیوں کو نافذ کرتے وقت بیفور سٹیٹمنٹ ٹرگر کا استعمال کرنا خاص طور پر مفید ہے۔ یہ مثال ظاہر کرتی ہے کہ ٹیبل فون بک پر "SOMEUSER" نامی کسی شخص پر پابندی کیسے نافذ کی جائے۔ CREATE OR REPLACE TRIGGER Hauschbc INSERT ON سے پہلے SOMEUSER.phone_book BEGIN REISE _ APLICATION _ ERROR (num =>-20050، msg => 'ایرر میسج یہاں جاتا ہے۔ ') ؛ اختتام ؛ اب، جب کسی بھی INSERT کی کوشش کرنے کے بعد "SOMEUSER" لاگ ان ہوتا ہے تو یہ ایرر میسج ظاہر ہوگا: SQL ایرر: ORA-20050: ایرر میسج یہاں جاتا ہے۔ اس طرح کی کسٹم ایرر کی اس بات پر پابندی ہے کہ نمبر متغیر کی تعریف کس طرح کی جا سکتی ہے۔ متعدد دیگر پہلے سے طے شدہ غلطیوں کی وجہ سے یہ متغیر-20000 سے-20999 کی حد میں ہونا چاہیے۔ حوالہ جات بیرونی روابط مائیکروسافٹ ایس کیو ایل سرور ڈراپ ٹرائگر مائی ایس کیو ایل ڈیٹا بیس نے مائی ایس کیو ایل ڈی بی کو متحرک کیا ٹرگرز ڈی بی 2 بنائیں ٹرائگر بیان اوریکل کریٹ ٹرائگر پوسٹگری ایس کیو ایل کریٹ ٹرائگر اوریکل میوٹیٹنگ ٹیبل کے مسائل ڈیلیٹ کیسکیڈ ایس کیو لائٹ استفسار زبان کے ساتھ: ٹرائگر ڈیٹا بیس مینجمنٹ سسٹم ایونٹس کمپیوٹنگ پر ٹرائگر اوریکل کی دستاویزات بنائیں مثال کے طور پر ایس کیو ایل کوڈ والے مضامین