17 محرک

ساخت وبلاگ

در این فصل ، محرک ها ، که رویه هایی است که در PL/SQL ، Java یا C نوشته شده است که به طور ضمنی اجرا می شوند هر زمان که یک جدول یا نمایش اصلاح شود یا وقتی برخی از اقدامات کاربر یا اقدامات سیستم پایگاه داده رخ می دهد ، به طور ضمنی اجرا می شود. شما می توانید هر زمان که یکی از عملیات های زیر رخ دهد ، باعث آتش سوزی شوید: بیانیه های DML در مورد یک شیء خاص طرحواره ، بیانیه های DDL صادر شده در یک طرحواره یا پایگاه داده ، ورود به سیستم کاربر یا رویدادهای ورود به سیستم ، خطاهای سرور ، راه اندازی پایگاه داده یا خاموش کردن نمونه.

این فصل شامل:

  • مقدمه ای برای محرک ها
  • قسمت هایی از یک ماشه
  • انواع محرک ها
  • اعدام را تحریک کنید

مقدمه ای برای محرک ها

اوراکل به شما امکان می دهد رویه هایی به نام محرک هایی را تعریف کنید که به طور ضمنی هنگام صدور بیانیه درج ، بروزرسانی یا حذف در برابر جدول مرتبط یا در برخی موارد ، در برابر دیدگاه یا هنگام اقدامات سیستم پایگاه داده انجام می شود. این رویه ها را می توان در PL/SQL یا Java نوشت و در پایگاه داده ذخیره کرد ، یا می توان آنها را به عنوان تماس C نوشته شد.

محرک ها شبیه به روشهای ذخیره شده هستند. ماشه ای که در پایگاه داده ذخیره می شود می تواند شامل بیانیه های SQL و PL/SQL یا Java باشد تا به عنوان یک واحد اجرا شود و می تواند از روشهای ذخیره شده استفاده کند. با این حال ، رویه ها و محرک ها در نحوه استناد به آنها متفاوت است. یک روش صریحاً توسط کاربر ، برنامه یا ماشه اجرا می شود. محرک ها به طور ضمنی توسط اوراکل هنگام وقوع یک رویداد تحریک ، بدون توجه به اینکه کدام کاربر به هم وصل شده است یا از کدام برنامه استفاده می شود ، اخراج می شوند.

شکل 17-1 یک برنامه پایگاه داده با برخی از بیانیه های SQL را نشان می دهد که به طور ضمنی چندین محرک ذخیره شده در پایگاه داده را آتش می زند. توجه کنید که فروشگاه های پایگاه داده به طور جداگانه از جداول مرتبط خود محرک هستند.

شکل 17-1 محرک

یک ماشه همچنین می تواند به یک روش C فراخوانی کند ، که برای عملیات محاسباتی فشرده مفید است.

وقایعی که محرک را آتش می زند شامل موارد زیر است:

 

  • بیانیه های DML که داده ها را در یک جدول تغییر می دهد (درج ، بروزرسانی یا حذف)
  • اظهارات DDL
  • رویدادهای سیستم مانند راه اندازی ، خاموش کردن و پیام های خطا
  • رویدادهای کاربر مانند ورود و ورود به سیستم

     

توجه: فرم های اوراکل می توانند محرک های مختلف را تعریف ، ذخیره و اجرا کنند. با این حال ، فرم های اوراکل را با محرک های مورد بحث در این فصل اشتباه نکنید.

چگونه از محرک ها استفاده می شود

محرک ها قابلیت های استاندارد اوراکل را برای ارائه یک سیستم مدیریت پایگاه داده بسیار سفارشی تکمیل می کنند. به عنوان مثال ، یک ماشه می تواند عملیات DML را در برابر یک جدول برای کسانی که در ساعات کار منظم صادر می شوند ، محدود کند. همچنین می توانید از محرک ها استفاده کنید:

 

  • به طور خودکار مقادیر ستون مشتق شده را تولید کنید
  • از معاملات نامعتبر جلوگیری کنید
  • مجوزهای امنیتی پیچیده را اجرا کنید
  • یکپارچگی مرجع را در گره ها در یک پایگاه داده توزیع شده اجرا کنید
  • قوانین پیچیده تجارت را اجرا کنید
  • ورود به سیستم شفاف را ارائه دهید
  • حسابرسی را ارائه دهید
  • تکرار جدول همزمان را حفظ کنید
  • آماری را در مورد دسترسی به جدول جمع کنید
  • داده های جدول را تغییر دهید هنگامی که اظهارات DML در برابر نماها صادر می شود
  • اطلاعات مربوط به رویدادهای پایگاه داده ، رویدادهای کاربر و بیانیه های SQL را برای عضویت در برنامه ها منتشر کنید

     

همچنین ببینید: راهنمای توسعه دهنده برنامه Oracle9i - اصول اولیه برای نمونه های استفاده از ماشه

برخی از یادداشت های هشدار دهنده در مورد محرک ها

اگرچه محرک ها برای شخصی سازی یک بانک اطلاعاتی مفید هستند ، اما در صورت لزوم از آنها استفاده کنید. استفاده بیش از حد از محرک ها می تواند به وابستگی های متقابل پیچیده منجر شود ، که حفظ آن در یک کاربرد بزرگ دشوار است. به عنوان مثال ، هنگامی که یک ماشه آتش می گیرد ، یک بیانیه SQL در عمل ماشه خود به طور بالقوه می تواند محرک های دیگر را شلیک کند و در نتیجه باعث ایجاد محرک های آبشار می شود. این می تواند اثرات ناخواسته ایجاد کند. شکل 17-2 محرک های آبشار را نشان می دهد.

شکل 17-2 محرک های آبشار

محرک ها در مقایسه با محدودیت های یکپارچگی اعلامیه

شما می توانید از هر دو محرک و محدودیت یکپارچگی برای تعریف و اجرای هر نوع قانون یکپارچگی استفاده کنید. با این حال ، شرکت اوراکل به شدت توصیه می کند که از محرک ها برای محدود کردن ورودی داده ها فقط در شرایط زیر استفاده کنید:

 

  • برای اجرای یکپارچگی مرجع زمانی که جداول کودک و والدین در گره های مختلف یک پایگاه داده توزیع شده قرار دارند
  • برای اجرای قوانین پیچیده تجاری با استفاده از محدودیت های یکپارچگی قابل تعریف نیست
  • هنگامی که یک قانون یکپارچگی مرجع مورد نیاز با استفاده از محدودیت های یکپارچگی زیر قابل اجرا نیست:
    • تهی نیست ، منحصر به فرد
    • کلید اصلی
    • کلید خارجی
    • بررسی
    • آبشار را حذف کنید
    • حذف تنظیم NULL

       

    همچنین ببینید: "چگونه اوراکل یکپارچگی داده ها را برای اطلاعات بیشتر در مورد محدودیت های یکپارچگی اجرا می کند

    قسمت هایی از یک ماشه

    یک ماشه دارای سه بخش اساسی است:

    • یک رویداد یا بیانیه تحریک کننده
    • محدودیت ماشه
    • یک عمل ماشه

    شکل 17-3 نشان دهنده هر یک از این قسمت های یک ماشه است و به معنای نشان دادن نحو دقیق نیست. بخش هایی که در زیر وجود دارد ، هر قسمت از یک ماشه را با جزئیات بیشتر توضیح می دهد.

    شکل 17-3 ماشه تنظیم مجدد

    رویداد یا بیانیه تحریک

    یک رویداد یا بیانیه تحریک کننده عبارت SQL ، رویداد پایگاه داده یا رویداد کاربر است که باعث آتش سوزی محرک می شود. یک رویداد تحریک می تواند یک یا چند مورد از موارد زیر باشد:

    • بیانیه ، به روزرسانی یا حذف بیانیه در یک جدول خاص (یا مشاهده ، در برخی موارد)
    • بیانیه ایجاد ، تغییر یا رها کردن بر روی هر شیء طرحواره
    • یک راه اندازی پایگاه داده یا خاموش کردن نمونه
    • یک پیام خطای خاص یا هر پیام خطایی
    • ورود به سیستم یا ورود به سیستم کاربر

    به عنوان مثال ، در شکل 17-3 ، بیانیه تحریک:

    بشربه روزرسانی Parts_On_HAND در موجودی.

    این عبارت به این معنی است که وقتی ستون parts_on_hand یک ردیف در جدول موجودی به روز می شود ، ماشه را آتش بزنید. هنگامی که رویداد تحریک یک عبارت به روزرسانی است ، می توانید یک لیست ستون را درج کنید تا مشخص شود کدام ستون ها باید برای آتش سوزی ماشه به روز شوند. شما نمی توانید لیست ستون را برای بیان و حذف بیانیه ها مشخص کنید ، زیرا آنها بر کل ردیف های اطلاعات تأثیر می گذارند.

    یک رویداد تحریک کننده می تواند چندین جمله SQL را مشخص کند:

    بشرموجودی را وارد یا به روز کنید یا حذف کنید.

    این بخش به این معنی است که وقتی بیانیه درج ، به روزرسانی یا حذف بیانیه علیه جدول موجودی صادر می شود ، ماشه را آتش بزنید. هنگامی که انواع مختلفی از اظهارات SQL می توانند یک محرک را آتش بزنند ، می توانید از پیش بینی های مشروط برای تشخیص نوع بیانیه تحریک استفاده کنید. به این ترتیب ، می توانید یک ماشه واحد ایجاد کنید که کد های مختلفی را بر اساس نوع جمله ای که ماشه را آتش می زند ، اجرا کند.

    محدودیت تحریک

    محدودیت ماشه بیان بولی را مشخص می کند که باید برای آتش سوزی محرک صادق باشد. اگر محدودیت ماشه به کاذب یا ناشناخته ارزیابی شود ، عمل ماشه اجرا نمی شود. در مثال ، محدودیت ماشه:

    new. parts_on_hand

    در نتیجه ، ماشه آتش نمی گیرد مگر اینکه تعداد قطعات موجود کمتر از مقدار تغییرگر فعلی باشد.

    عمل ماشه

    یک عمل ماشه روشی است (بلوک PL/SQL ، برنامه جاوا یا C Callout) که حاوی بیانیه ها و کد SQL است که هنگام وقوع وقایع زیر باید اجرا شود:

    • بیانیه محرک صادر می شود.
    • محدودیت ماشه به درستی ارزیابی می شود.

    مانند روشهای ذخیره شده ، یک عمل ماشه می تواند:

    • حاوی بیانیه های SQL ، PL/SQL یا جاوا
    • سازه های زبان PL/SQL مانند متغیرها ، ثابت ها ، نشانگرها ، استثنائات را تعریف کنید
    • سازه های زبان جاوا را تعریف کنید
    • با روشهای ذخیره شده تماس بگیرید

    اگر محرک ها محرک ردیف باشند ، بیانیه های یک عمل ماشه به مقادیر ستون ردیف که توسط ماشه پردازش می شود ، دسترسی دارند. نام همبستگی دسترسی به مقادیر قدیمی و جدید برای هر ستون را فراهم می کند.

    انواع محرک ها

    در این بخش انواع مختلفی از محرک ها شرح داده شده است:

    • محرک های ردیف و محرک های بیانیه
    • قبل و بعد از محرک ها
    • به جای محرک ها
    • محرک رویدادهای سیستم و رویدادهای کاربر

    محرک های ردیف و محرک های بیانیه

    هنگامی که یک ماشه را تعریف می کنید ، می توانید تعداد دفعاتی را که عملکرد ماشه اجرا می شود مشخص کنید:

    • یک بار برای هر ردیفی که تحت تأثیر دستور راه اندازی قرار می گیرد، مانند راه اندازی که توسط دستور UPDATE اجرا می شود که بسیاری از ردیف ها را به روزرسانی می کند.
    • یک بار برای دستور راه اندازی، مهم نیست که چند ردیف را تحت تأثیر قرار می دهد

    محرک های ردیف

    هر بار که جدول تحت تأثیر دستور راه اندازی قرار می گیرد، یک ماشه ردیف فعال می شود. به عنوان مثال، اگر یک دستور UPDATE چندین ردیف از یک جدول را به روز کند، برای هر ردیفی که تحت تأثیر دستور UPDATE قرار می گیرد، یک تریگر ردیف یک بار فعال می شود. اگر دستور راه اندازی هیچ ردیفی را تحت تأثیر قرار ندهد، تریگر ردیف اجرا نمی شود.

    راه اندازهای ردیف در صورتی مفید هستند که کد موجود در عملکرد راه انداز به داده های ارائه شده توسط دستور راه انداز یا ردیف هایی که تحت تأثیر قرار می گیرند بستگی داشته باشد. به عنوان مثال، شکل 17-3 یک تریگر ردیفی را نشان می دهد که از مقادیر هر ردیف تحت تاثیر دستور راه اندازی استفاده می کند.

    محرک های بیانیه

    یک دستور راه انداز یک بار از طرف دستور راه اندازی اجرا می شود، بدون توجه به تعداد ردیف های جدولی که دستور راه اندازی روی آن ها تأثیر می گذارد، حتی اگر هیچ ردیفی تحت تأثیر قرار نگیرد. به عنوان مثال، اگر یک دستور DELETE چندین ردیف را از یک جدول حذف کند، یک راه انداز DELETE در سطح بیانیه فقط یک بار فعال می شود.

    راه اندازهای بیانیه در صورتی مفید هستند که کد موجود در عملکرد راه انداز به داده های ارائه شده توسط دستور راه انداز یا ردیف های تحت تأثیر بستگی نداشته باشد. به عنوان مثال، از یک دستور العمل برای:

    • یک بررسی امنیتی پیچیده روی زمان یا کاربر فعلی انجام دهید
    • یک رکورد حسابرسی واحد ایجاد کنید

    قبل و بعد از محرک ها

    هنگام تعریف یک تریگر، می توانید زمان بندی راه اندازی را مشخص کنید - اینکه آیا اقدام ماشه قبل یا بعد از دستور راه اندازی اجرا شود. BEFORE و AFTER برای هر دو تریگر دستور و ردیف اعمال می شود.

    تریگرهای BEFORE و AFTER که توسط دستورات DML اجرا می شوند را می توان فقط در جداول تعریف کرد نه در نماها. با این حال، در صورتی که دستور INSERT، UPDATE یا DELETE در برابر نما صادر شود، تریگرها در جداول پایه یک view فعال می شوند. تریگرهای BEFORE و AFTER که توسط دستورات DDL اجرا می شوند را می توان فقط در پایگاه داده یا طرحواره تعریف کرد، نه در جداول خاص.

    قبل از شروع

    قبل از اینکه تریگرها، اقدام ماشه را قبل از اجرای دستور محرک اجرا کنند. این نوع ماشه معمولاً در شرایط زیر استفاده می شود:

    • زمانی که عمل ماشه تعیین می کند که آیا دستور راه اندازی باید تکمیل شود یا خیر. با استفاده از یک تریگر BEFORE برای این منظور، می توانید پردازش غیرضروری دستور راه اندازی و بازگشت نهایی آن را در مواردی که استثنایی در اقدام ماشه مطرح می شود حذف کنید.
    • برای استخراج مقادیر ستون خاص قبل از تکمیل بیانیه درج یا به روزرسانی تحریک.

    بعد از محرک ها

    بعد از اجرای بیانیه تحریک ، عمل ماشه را اجرا کنید.

    ترکیبات نوع ماشه

    با استفاده از گزینه های ذکر شده قبلاً ، می توانید چهار نوع محرک ردیف و بیانیه ایجاد کنید:

    • قبل از شروع بیانیه قبل از اجرای بیانیه تحریک ، عمل ماشه اجرا می شود.
    • قبل از تغییر ردیف قبل از اصلاح هر سطر تحت تأثیر بیانیه تحریک و قبل از بررسی محدودیت های یکپارچگی مناسب ، اگر محدودیت ماشه نقض نشده باشد ، عمل ماشه اجرا می شود.
    • پس از ماشه ردیف پس از اصلاح هر سطر تحت تأثیر بیانیه تحریک و احتمالاً اعمال محدودیت های یکپارچگی مناسب ، عمل ماشه برای ردیف فعلی اجرا می شود به شرط آنکه محدودیت ماشه نقض نشده باشد. بر خلاف قبل از محرک های ردیف ، بعد از اینکه ردیف باعث قفل کردن ردیف می شود.
    • پس از بیان بیانیه پس از اجرای بیانیه تحریک و استفاده از هرگونه محدودیت یکپارچگی معوق ، عمل ماشه اجرا می شود.

    برای هر جدول مشخص می توانید چندین محرک از همان نوع را برای همان عبارت داشته باشید. به عنوان مثال ، شما می توانید دو مورد قبل از بیانیه برای اظهارات به روزرسانی در جدول کارمندان داشته باشید. چندین محرک از همان نوع اجازه نصب ماژولار برنامه هایی را دارند که در همان جداول محرک هستند. همچنین ، Oracle Materialized View از پس از محرک های ردیف استفاده می کند ، بنابراین می توانید علاوه بر اینکه Oracle پس از ماشه ردیف تعریف شده ، خود را بعد از ماشه ردیف طراحی کنید.

    شما می توانید به همان اندازه که برای هر نوع عبارت DML نیاز دارید ، به همان اندازه محرک های مختلف ایجاد کنید ، (درج ، بروزرسانی یا حذف).

    به عنوان مثال ، فرض کنید شما یک جدول ، SAL دارید ، و می خواهید بدانید که به چه زمانی به جدول دسترسی پیدا می کند و انواع نمایش داده ها صادر می شود. مثال زیر شامل یک بسته نمونه و ماشه است که این اطلاعات را بر اساس ساعت و نوع عمل (به عنوان مثال ، به روزرسانی ، حذف یا درج) در جدول SAL ردیابی می کند. آمار متغیر جلسه جهانی. ROWCNT توسط ماشه قبل از بیانیه به صفر می رسد. سپس هر بار که ماشه ردیف اجرا می شود افزایش می یابد. سرانجام اطلاعات آماری در جدول STAT_TAB توسط ماشه پس از بیانیه ذخیره می شود.

    به جای محرک ها

    به جای اینکه محرک ها روشی شفاف برای اصلاح دیدگاه ها ارائه دهند که نمی توانند مستقیماً از طریق بیانیه های DML اصلاح شوند (درج ، به روزرسانی و حذف). این محرک ها به جای محرک ها خوانده می شوند زیرا برخلاف سایر انواع محرک ها ، اوراکل به جای اجرای بیانیه تحریک ، ماشه را آتش می زند.

    شما می توانید درج طبیعی بنویسید ، به روز کنید و بیانیه هایی را در برابر نمای حذف کنید و به جای ماشه برای به روزرسانی جداول زیرین به طور مناسب اخراج می شود. به جای محرک ها برای هر ردیف نمای که اصلاح می شود فعال می شوند.

    دیدگاه ها را تغییر دهید

    تغییر دیدگاه ها می تواند نتایج مبهم داشته باشد:

    • حذف یک ردیف در یک نمای می تواند به معنای حذف آن از جدول پایه یا به روزرسانی برخی از مقادیر باشد تا دیگر توسط نمای انتخاب نشود.
    • قرار دادن یک ردیف در یک نمای می تواند به معنای قرار دادن یک ردیف جدید در جدول پایه یا به روزرسانی یک ردیف موجود باشد تا توسط نمای پیش بینی شود.
    • به روزرسانی یک ستون در نمای که شامل پیوستن است ممکن است معنایی ستون های دیگر را که توسط نمای پیش بینی نشده اند ، تغییر دهد.

    نمایش های شیء مشکلات اضافی را ارائه می دهد. به عنوان مثال ، استفاده کلیدی از نماهای شیء نشان دادن روابط استاد/جزئیات است. این عملیات ناگزیر شامل پیوستن است ، اما اصلاح پیوستن ذاتاً مبهم است.

    در نتیجه این ابهامات ، محدودیت های بسیاری وجود دارد که در مورد آنها قابل اصلاح است. به جای ماشه می تواند در نمای شی و همچنین دیدگاههای رابطه ای که در غیر این صورت قابل تغییر نیست استفاده شود.

    حتی اگر این نمایش ذاتاً قابل اصلاح باشد ، ممکن است بخواهید اعتبارسنجی را در مقادیر درج شده ، به روز شده یا حذف انجام دهید. در این حالت می توان به جای محرک ها نیز استفاده کرد. در اینجا کد ماشه اعتبارسنجی را در ردیف های اصلاح شده انجام می دهد و در صورت اعتبار ، تغییرات را در جداول زیرین پخش می کند.

    به جای Triggers همچنین به شما امکان می دهد نمونه های نمای شیء را از طریق OCI در سمت مشتری تغییر دهید. برای اصلاح یک شیء که توسط یک نمای شیء در حافظه نهان شیء مشتری تحریم شده و آن را به فروشگاه مداوم برگردانید ، باید به جای محرک ها مشخص کنید ، مگر اینکه نمای شیء ذاتاً قابل تغییر باشد. با این حال ، لازم نیست این محرک ها فقط برای پین کردن و خواندن شیء مشاهده در حافظه نهان شیء تعریف شود.

    نمایش هایی که قابل تغییر نیستند

    اگر بتوان داده ها را بدون استفاده از محرک ها به جای محرک ها درج، به روزرسانی یا حذف کرد و با محدودیت های فهرست شده در زیر مطابقت داشته باشد، یک نما ذاتاً قابل تغییر است. اگر پرس و جوی view حاوی هر یک از ساختارهای زیر باشد، View ذاتاً قابل تغییر نیست و بنابراین نمی توانید درج، به روزرسانی یا حذف را در View انجام دهید:

    • عملگرها را تنظیم کنید
    • توابع جمع
    • GROUP BY، CONNECT BY یا START WITH بندها
    • عملگر DISTINCT
    • پیوستن ها (با این حال، برخی از نماهای پیوستن قابل به روز رسانی هستند)

    اگر نما حاوی ستون های کاذب یا عباراتی باشد، می توانید نما را فقط با یک عبارت UPDATE به روزرسانی کنید که به هیچ یک از ستون های کاذب یا عبارات اشاره نمی کند.

    به جای تریگرها در جداول تودرتو

    شما نمی توانید عناصر یک ستون جدول تودرتو در یک نما را مستقیماً با عبارت TABLE تغییر دهید. با این حال، می توانید این کار را با تعریف یک تریگر در ستون جدول تودرتوی نما انجام دهید. اگر یک عنصر جدول تودرتو به روزرسانی، درج یا حذف شود و تغییرات واقعی در جداول زیربنایی انجام شود، راه اندازهای جداول تودرتو فعال می شوند.

    محرک رویدادهای سیستم و رویدادهای کاربر

    می توانید از محرک ها برای انتشار اطلاعات مربوط به رویدادهای پایگاه داده برای مشترکین استفاده کنید. برنامه ها می توانند همانطور که در پیام های سایر برنامه ها مشترک می شوند، در رویدادهای پایگاه داده مشترک شوند. این رویدادهای پایگاه داده می تواند شامل موارد زیر باشد:

    • رویدادهای سیستم
      • راه اندازی و خاموش شدن پایگاه داده
      • رویدادهای پیام خطای سرور
      • ورود و خروج کاربر
      • عبارات DDL (CREATE، ALTER و DROP)
      • عبارات DML (درج، حذف، و به روز رسانی)

      تریگرها در رویدادهای سیستم را می توان در سطح پایگاه داده یا سطح طرح واره تعریف کرد. به عنوان مثال، یک عامل خاموش کردن پایگاه داده در سطح پایگاه داده تعریف شده است:

      ایجاد TRIGGER register_shutdown در SHUTDOWN BEGIN پایگاه داده. DBMS_AQ. ENQUEUE(. );. پایان؛

      تریگرها در عبارات DDL یا رویدادهای ورود/خروج نیز می توانند در سطح پایگاه داده یا سطح طرح واره تعریف شوند. تریگرها در عبارات DML را می توان روی یک جدول یا نما تعریف کرد. یک ماشه تعریف شده در سطح پایگاه داده برای همه کاربران فعال می شود، و یک ماشه تعریف شده در سطح طرح یا جدول تنها زمانی فعال می شود که رویداد آغازگر شامل آن طرحواره یا جدول باشد.

      انتشار رویداد

      انتشار رویداد از مکانیسم انتشار-اشتراک صف پیشرفته Oracle استفاده می کند. یک صف به عنوان مخزن پیام برای موضوعات مورد علاقه مشترکین مختلف عمل می کند. تریگرها از بسته DBMS_AQ برای قرار دادن یک پیام در هنگام رخ دادن رویدادهای خاص سیستم یا کاربر استفاده می کنند.

      ویژگی های رویداد

      هر رویداد امکان استفاده از ویژگی ها را در متن ماشه فراهم می کند. به عنوان مثال ، محرک های راه اندازی و خاموش کردن پایگاه داده دارای ویژگی هایی برای شماره نمونه و نام بانک اطلاعاتی هستند و محرک های ورود به سیستم و ورود به سیستم دارای ویژگی هایی برای نام کاربری هستند. اگر می خواهید هنگام وقوع این رویداد ، این ویژگی را منتشر کنید ، می توانید تابعی را با همان نام به عنوان یک ویژگی مشخص کنید. مقدار این ویژگی در هنگام شلیک ماشه به عملکرد یا بار بار منتقل می شود. برای محرک های موجود در بیانیه های DML ، مقادیر ستون قدیمی مقدار ویژگی را به مقدار ستون جدید منتقل می کند.

      وقایع سیستم

      رویدادهای سیستم که می توانند محرک را آتش بزنند مربوط به پیام های راه اندازی و خاموش کردن و خطای نمونه است. محرک های ایجاد شده در رویدادهای راه اندازی و خاموش کردن باید با بانک اطلاعاتی همراه باشند. محرک های ایجاد شده در رویدادهای خطا می توانند با پایگاه داده یا با یک طرحواره همراه باشند.

      • هنگامی که پایگاه داده توسط یک نمونه باز می شود ، راه اندازی باعث آتش سوزی می شود. ویژگی های آنها شامل رویداد سیستم ، شماره نمونه و نام بانک اطلاعاتی است.
      • خاموش شدن درست قبل از شروع سرور به عنوان مثال ، آتش سوزی را ایجاد می کند. شما می توانید از این محرک ها استفاده کنید تا برنامه های مشترک در هنگام خاموش شدن پایگاه داده به طور کامل خاموش شوند. برای خاموش کردن نمونه غیر طبیعی ، این محرک ها نمی توانند اخراج شوند. ویژگی های محرک های خاموش شامل رویداد سیستم ، شماره نمونه و نام بانک اطلاعاتی است.
      • در صورت بروز خطای مشخص ، ServerError باعث آتش سوزی می شود ، یا در صورت عدم وجود شماره خطا ، هرگونه خطایی رخ می دهد. ویژگی های آنها شامل رویداد سیستم و شماره خطا است.

      رویدادهای کاربر

      رویدادهای کاربر که می توانند محرک را آتش بزنند مربوط به ورود کاربر و ورود به سیستم ، بیانیه های DDL و بیانیه های DML است.

      محرک در رویدادهای ورود به سیستم و ورود به سیستم

      محرک های ورود و ورود به سیستم می توانند با پایگاه داده یا با یک طرحواره همراه باشند. ویژگی های آنها شامل رویداد سیستم و نام کاربری است و می توانند شرایط ساده ای را در نام کاربری و نام کاربری مشخص کنند.

      • ورود به سیستم باعث آتش سوزی پس از ورود موفقیت آمیز کاربر می شود.
      • Logoff در ابتدای ورود به سیستم کاربر باعث آتش سوزی می شود.
      محرک اظهارات DDL

      محرک های DDL می توانند با پایگاه داده یا با یک طرحواره همراه باشند. ویژگی های آنها شامل رویداد سیستم ، نوع شیء طرح و نام آن است. آنها می توانند شرایط ساده ای را در مورد نوع و نام شیء طرحواره و همچنین توابع مانند UserID و نام کاربری مشخص کنند. محرک های DDL شامل انواع زیر از محرک ها هستند:

      • قبل از ایجاد و بعد از ایجاد ، هنگامی که یک شیء طرح در پایگاه داده یا طرحواره ایجاد می شود ، باعث آتش سوزی می شود.
      • قبل از تغییر و تغییر در آتش سوزی هنگامی که یک شیء طرح در پایگاه داده یا طرحواره تغییر می کند ، باعث آتش سوزی می شود.
      • قبل از قطره و بعد از قطره باعث آتش سوزی می شود که یک شیء طرح از پایگاه داده یا طرحواره خارج شود.
      محرک اظهارات DML

      محرک های DML برای انتشار رویداد با یک جدول همراه است. آنها می توانند قبل یا بعد از آن باشند که برای هر سطحی که عملکرد DML مشخص شده در آن رخ می دهد ، آتش سوزی می شوند. شما نمی توانید به جای محرک در دیدگاه ها برای انتشار رویدادهای مربوط به اظهارات DML استفاده کنید-در ادامه ، می توانید رویدادهایی را با استفاده از قبل یا بعد از عمل برای عملیات DML در جداول اساسی نمای که به جای محرک ایجاد می شود ، منتشر کنید.

      ویژگی های محرک DML برای انتشار رویداد شامل رویداد سیستم و ستون های تعریف شده توسط کاربر در لیست انتخاب است. آنها می توانند شرایط ساده ای را در مورد نوع و نام شیء طرحواره و همچنین توابع (مانند UID ، کاربر ، UserENV و SYSDATE) ، شبه کلمها و ستون ها مشخص کنند. ستون ها را می توان پیشوند: قدیمی و: جدید برای مقادیر قدیمی و جدید. محرک های اظهارات DML شامل محرک های زیر است:

       

      • قبل از درج و بعد از درج باعث آتش سوزی برای هر سطر درج شده در جدول شود.
      • قبل از بروزرسانی و بعد از بروزرسانی باعث آتش سوزی برای هر سطر به روز شده در جدول می شود.
      • قبل از حذف و بعد از حذف باعث آتش سوزی برای هر ردیف حذف شده از جدول می شود.

         

      اعدام را تحریک کنید

      یک ماشه در هر دو حالت مجزا است:

      اگر یک بیانیه تحریک کننده صادر شود و محدودیت ماشه (در صورت وجود) به درستی ارزیابی شود ، یک ماشه فعال عمل ماشه خود را اجرا می کند.

      یک ماشه معلول عمل ماشه خود را اجرا نمی کند ، حتی اگر بیانیه محرک صادر شود و محدودیت ماشه (در صورت وجود) به درستی ارزیابی شود.

      برای محرک های فعال ، اوراکل به طور خودکار اقدامات زیر را انجام می دهد:

      • اجرای هر نوع در یک دنباله شلیک برنامه ریزی شده هنگامی که بیش از یک ماشه توسط یک عبارت SQL شلیک می شود
      • بررسی محدودیت یکپارچگی را در یک نقطه مشخص از زمان با توجه به انواع مختلف محرک ها انجام می دهد و تضمین می کند که محرک ها نمی توانند محدودیت های یکپارچگی را به خطر بیاندازند
      • دیدگاههای سازگار با خواسته ها و محدودیت ها را ارائه می دهد
      • وابستگی ها را بین محرک ها و اشیاء طرحواره ای که در کد عمل ماشه ذکر شده است ، مدیریت می کند
      • اگر یک ماشه جداول از راه دور را در یک پایگاه داده توزیع شده به روز کند ، از تعهد دو فاز استفاده می کند
      • اگر بیش از یک ماشه از همان نوع برای یک بیانیه خاص وجود داشته باشد ، چندین محرک را به ترتیب نامشخص آتش می زند.

      مدل اجرا برای محرک ها و بررسی محدودیت یکپارچگی

      یک بیانیه SQL به طور بالقوه می تواند چهار نوع محرک را آتش بزند:

      • Befor E Row Triggers
      • قبل از بیانیه
      • بعد از محرک ردیف
      • بعد از بیان

      یک بیانیه تحریک کننده یا بیانیه ای در یک ماشه می تواند باعث شود یک یا چند محدودیت یکپارچگی بررسی شود. همچنین ، محرک ها می توانند حاوی اظهاراتی باشند که باعث آتش سوزی دیگر می شود (محرک های آبشار).

      اوراکل از مدل اجرای زیر برای حفظ توالی شلیک مناسب از محرک های مختلف و بررسی محدودیت استفاده می کند:

      1. همه قبل از بیانیه را اجرا کنید که در مورد بیانیه اعمال می شود.
      2. حلقه برای هر ردیف تحت تأثیر عبارت SQL.
        1. همه قبل از محرک های ردیف را اجرا کنید که در مورد بیانیه اعمال می شود.
        2. Lock and Change Row ، و بررسی محدودیت یکپارچگی را انجام دهید.(قفل تا زمان انجام معامله آزاد نمی شود.)
        3. همه را بعد از محرک های ردیف اجرا کنید که در مورد بیانیه اعمال می شود.

        تعریف مدل اجرای بازگشتی است. به عنوان مثال ، یک بیانیه SQL داده شده می تواند باعث شود که ماشه قبل از ردیف اخراج شود و یک محدودیت یکپارچگی بررسی شود. این که قبل از Row Trigger ، به نوبه خود ، ممکن است به روزرسانی را انجام دهد که باعث می شود یک محدودیت یکپارچگی بررسی شود و یک بیانیه بعد از آن اخراج شود. ساختار پس از بیان باعث می شود محدودیت یکپارچگی بررسی شود. در این حالت ، مدل اجرای مراحل را به صورت بازگشتی اجرا می کند ، به شرح زیر:

        بیانیه اصلی SQL صادر شده است.

        1. قبل از شلیک ردیف.
          1. پس از بیانیه های ناشی از بروزرسانی قبل از ماشه ردیف. من. بیانیه های بعد از بیانیه اجرا. ii. محدودیت یکپارچگی بررسی شده در جداول پس از محرک های بیانیه تغییر یافته است.
          2. بیانیه های قبل از ردیف اجرا می شود.
          3. محدودیت یکپارچگی بررسی شده در جداول قبل از محرک های ردیف تغییر یافته است.

          دو استثنا در این بازگشت وجود دارد:

          • هنگامی که یک بیانیه تحریک یک جدول را در یک محدودیت مرجع (یا جدول کلید اصلی یا کلید خارجی) تغییر می دهد ، و یک بیانیه تحریک شده دیگر را تغییر می دهد ، فقط بیانیه تحریک محدودیت یکپارچگی را بررسی می کند. این امر به محرک های ردیف اجازه می دهد تا یکپارچگی مرجع را افزایش دهند.
          • محرک های بیانیه به دلیل حذف آبشار و حذف تنظیمات تهی قبل و بعد از حذف بیانیه کاربر ، نه قبل و بعد از اظهارات اجرای فردی ، اخراج می شوند. این امر مانع از مواجهه با خطاهای جهش می شود.

          ویژگی مهم مدل اجرای این است که کلیه اقدامات و چک های انجام شده در نتیجه بیانیه SQL باید موفق شوند. اگر یک استثناء در یک ماشه مطرح شود ، و استثنا به صراحت انجام نمی شود ، تمام اقدامات انجام شده در نتیجه بیانیه اصلی SQL ، از جمله اقدامات انجام شده توسط محرک های شلیک شده ، به عقب برگردانده می شوند. بنابراین ، محدودیت های یکپارچگی نمی تواند توسط محرک ها به خطر بیفتد. مدل اعدام محدودیت های یکپارچگی را در نظر می گیرد و محرک هایی را که نقض محدودیت های یکپارچگی اعلامیه است ، از بین می برد.

          به عنوان مثال ، در سناریوی قبلاً مشخص شده ، فرض کنید مراحل 1 تا 8 موفق می شوند. با این حال ، در مرحله 9 محدودیت یکپارچگی نقض می شود. در نتیجه این تخلف ، تمام تغییراتی که توسط بیانیه SQL (در مرحله 8) ایجاد شده است ، قبل از ماشه ردیف (در مرحله 6) شلیک شده ، و آتش سوزی پس از ماشه (در مرحله 4) به عقب برگردانده می شود.

          اگرچه محرک هایی از انواع مختلف به ترتیب خاصی شلیک می شوند ، اما محرک هایی از همان نوع برای همان بیانیه برای آتش سوزی به هر ترتیب خاص تضمین نمی شوند. به عنوان مثال ، همه قبل از ردیف برای یک بیانیه به روزرسانی واحد ممکن است همیشه به همان ترتیب آتش نگیرند. برنامه های خود را طراحی کنید تا آنها به ترتیب شلیک چندین محرک از همان نوع تکیه نکنند.

          دسترسی به داده ها برای محرک ها

          هنگامی که یک ماشه اخراج می شود ، جداول ارجاع شده در عمل ماشه ممکن است در حال حاضر با بیانیه های SQL در معاملات سایر کاربران در حال تغییر باشد. در همه موارد ، اظهارات SQL در محرک ها اجرا می شود ، قوانین متداول مورد استفاده برای بیانیه های SQL مستقل را دنبال می کنند. به طور خاص ، اگر یک معامله غیرقابل قبول مقادیری را اصلاح کرده باشد که یک محرک اخراج شده یا نیاز به خواندن (پرس و جو) یا نوشتن (به روزرسانی) داشته باشد ، پس اظهارات SQL در بدنه ماشه اخراج شده از دستورالعمل های زیر استفاده می کند:

          • نمایش داده شد به دیدگاه مادی سازگار با خواندن فعلی در مورد جداول ارجاع شده و هر داده ای که در همان معامله تغییر یافته است ، مراجعه کنید.
          • به روزرسانی ها صبر می کنند تا قبل از ادامه قفل قفل داده های موجود منتشر شود.

          مثالهای زیر این نکات را نشان می دهد.

          دسترسی به داده ها برای محرک ها به عنوان مثال 1

          فرض کنید که Trigger Salary_Check (Body) شامل عبارت SELECT زیر است:

          min_salary ، max_salary را به min_salary ، max_salary از مشاغل که در آن job_title =: new. job_title ؛

          برای این مثال ، فرض کنید که Transaction T1 شامل بروزرسانی در ستون MAX_SALARY جدول مشاغل است. در این مرحله ، ماشه Salary_Check با بیانیه ای در معامله T2 اخراج می شود. عبارت SELECT در Trigger Fired (سرچشمه T2) به روزرسانی توسط معامله غیر قابل قبول T1 را مشاهده نمی کند ، و پرس و جو موجود در ماشه ، مقدار قدیمی Max_Salary را از نظر نکته مداوم برای معامله T2 باز می گرداند.

          دسترسی به داده ها برای محرک های مثال 2

          فرض کنید که ماشه total_salary یک ستون مشتق شده را حفظ می کند که کل حقوق همه اعضا را در یک بخش ذخیره می کند:

          Trigger total_salary را پس از حذف یا درج یا به روزرسانی Department_id ایجاد کنید ، حقوق کارمندان برای هر سطر شروع کنیدسپس بخش ها را به روز کنید total_salary = total_salary -: old. salary که در آن department_id =: old. department_id ؛پایان اگر ؛در صورت درج یا (به روزرسانی و: old. department_id! =: new. department_id) سپس بخش ها را به روز کنید total_salary = total_salary +: new. salary که در آن department_id =: new. department_id ؛پایان اگر ؛if (به روزرسانی و: old. department_id =: new. department_id و: old. salary! =: new. salary) سپس بخش ها را به روز کنید total_salary = total_salary -: old. salary +: new. salary که در آن department_id =: new. department_id ؛پایان اگر ؛پایان؛

          برای این مثال ، فرض کنید که معامله غیرمجاز یک کاربر شامل بروزرسانی در ستون Total_salary یک ردیف در جدول بخش ها است. در این مرحله ، ماشه total_salary با بیانیه SQL کاربر دوم شلیک می شود. از آنجا که معامله غیرقابل قبول کاربر اول حاوی به روزرسانی به یک مقدار مناسب در ستون total_salary (یعنی قفل ردیف در حال نگه داشتن است) ، به روزرسانی های انجام شده توسط ماشه total_salary تا زمانی که معامله نگه داشتن قفل ردیف انجام نشود اجرا نمی شودیا به عقب چرخید. بنابراین ، کاربر دوم منتظر می ماند تا زمان تعهد یا بازپرداخت معامله کاربر اول.

          ذخیره سازی محرک های PL/SQL

          Oracle Stores PL/SQL دقیقاً مانند روشهای ذخیره شده ، به صورت کامپایل شده است. هنگامی که یک بیانیه Create Trigger تعهد می کند ، کد PL/SQL کامپایل شده ، به نام P Code (برای PseudoCode) در پایگاه داده ذخیره می شود و کد منبع ماشه از استخر مشترک شسته می شود.

          راهنمای و مرجع کاربر PL/SQL برای اطلاعات بیشتر در مورد تهیه و ذخیره کد PL/SQL

          اجرای محرک ها

          اوراکل با استفاده از همان مراحل استفاده شده برای اجرای روش ، یک ماشه را در داخل اجرا می کند. تنها تفاوت ظریف این است که کاربر در صورت داشتن این امتیاز برای اجرای بیانیه تحریک ، حق دارد ماشه را آتش بزند. به غیر از این ، محرک ها تأیید می شوند و به همان روش روشهای ذخیره شده اجرا می شوند.

          راهنمای و مرجع کاربر PL/SQL برای اطلاعات بیشتر در مورد رویه های ذخیره شده

          نگهداری وابستگی برای محرک ها

          مانند روشها ، محرک ها به اشیاء ارجاع شده بستگی دارند. اوراکل به طور خودکار وابستگی های یک ماشه را به اشیاء طرحواره ای که در عمل ماشه آن ذکر شده است ، مدیریت می کند. مشکلات وابستگی برای محرک ها همان مواردی است که برای مراحل ذخیره شده است. محرک ها مانند روشهای ذخیره شده تحت درمان قرار می گیرند. آنها در فرهنگ لغت داده قرار می گیرند.< Span> اوراکل با استفاده از همان مراحل استفاده شده برای اجرای روش ، یک ماشه را در داخل اجرا می کند. تنها تفاوت ظریف این است که کاربر در صورت داشتن این امتیاز برای اجرای بیانیه تحریک ، حق دارد ماشه را آتش بزند. به غیر از این ، محرک ها تأیید می شوند و به همان روش روشهای ذخیره شده اجرا می شوند.

اخبار رمز ارزها...
ما را در سایت اخبار رمز ارزها دنبال می کنید

برچسب : نویسنده : منیژه سلیمی بازدید : <-PostHit-> تاريخ : يکشنبه 8 مرداد 1402 ساعت: 14:53