ماشه یک واحد PL/SQL است که در پایگاه داده ذخیره می شود و (اگر در حالت فعال باشد) در پاسخ به یک رویداد مشخص به طور خودکار ("آتش سوزی") را اجرا می کند.
یک ماشه دارای این ساختار است:
ماشهtrigger_name adrigering_event [ trigger_restriction] شروعadrgered_action؛پایان؛
trigger_name باید برای محرک های این طرح منحصر به فرد باشد. یک ماشه می تواند به همان نام دیگری از شیء در طرح (مثلاً یک جدول) داشته باشد. با این حال ، اوراکل توصیه می کند از یک کنوانسیون نامگذاری استفاده کنید که از سردرگمی جلوگیری می کند.
اگر ماشه در حالت فعال باشد ، Triggering_Event باعث می شود که پایگاه داده در صورتی که trigger_restriction درست یا حذف شده باشد ، فعالیت تحریک شده را انجام دهد. trigering_event با یک جدول ، نمای ، یک طرح یا بانک اطلاعاتی همراه است و یکی از این موارد است:
- بیانیه DML (شرح داده شده در "درباره زبان دستکاری داده ها (DML)")
- بیانیه DDL (شرح داده شده در "درباره زبان تعریف داده (DDL)")
- عملکرد پایگاه داده (ServerError ، ورود به سیستم ، ورود به سیستم ، راه اندازی یا خاموش کردن)
اگر ماشه در حالت غیرفعال باشد ، triggering_event باعث نمی شود که پایگاه داده برای اجرای triggered_action انجام شود ، حتی اگر trigger_restriction صحیح باشد یا حذف شود.
به طور پیش فرض ، یک ماشه در حالت فعال ایجاد می شود. می توانید یک ماشه فعال را غیرفعال کنید و یک ماشه معلول را فعال کنید.
بر خلاف یک زیر برنامه ، یک ماشه به طور مستقیم قابل استفاده نیست. یک ماشه فقط با رویداد تحریک کننده آن ، که می تواند توسط هر کاربر یا برنامه ایجاد شود ، فراخوانی می شود. ممکن است شما از اجرای یک ماشه غافل باشید ، مگر اینکه خطایی را ایجاد کند که به درستی انجام نشود.
یک ماشه ساده می تواند دقیقاً در یکی از این نقاط زمان بندی آتش بگیرد:
- قبل از اجرای رویداد تحریک (سطح بیانیه قبل از ماشه)
- بعد از اجرای رویداد تحریک (سطح بیانیه پس از ماشه)
- قبل از هر سطر که این رویداد تأثیر می گذارد (سطح ردیف قبل از ماشه)
- بعد از هر سطر که این رویداد تأثیر می گذارد (سطح ردیف بعد از ماشه)
یک ماشه مرکب می تواند در چندین نقطه زمان بندی آتش بگیرد. برای اطلاعات در مورد محرک های مرکب ، به مرجع زبان Oracle PL/SQL مراجعه کنید.
به جای Trigger در یک نمای تعریف می شود ، و رویداد تحریک کننده آن جمله ای DML است. به جای اجرای عبارت DML ، پایگاه داده اوراکل به جای ماشه را اجرا می کند. برای اطلاعات بیشتر ، به "ایجاد یک به جای ماشه" مراجعه کنید.
یک ماشه سیستم بر روی یک طرحواره یا بانک اطلاعاتی تعریف شده است. محرک تعریف شده در یک طرح برای هر رویداد مرتبط با صاحب طرح (کاربر فعلی) آتش می گیرد. یک ماشه تعریف شده در یک پایگاه داده برای هر رویداد مرتبط با همه کاربران آتش می گیرد.
یک استفاده از محرک ها اجرای قوانین تجاری است که در مورد کلیه برنامه های مشتری اعمال می شود. به عنوان مثال ، فرض کنید داده های اضافه شده به جدول کارمندان باید دارای یک قالب خاص باشند و بسیاری از برنامه های مشتری می توانند داده ها را به این جدول اضافه کنند. یک ماشه در جدول می تواند قالب مناسب کلیه داده های اضافه شده به آن را تضمین کند. از آنجا که ماشه هر زمان که هر مشتری داده را به جدول اضافه کند ، اجرا می کند ، هیچ مشتری نمی تواند قوانین را دور بزند ، و کدی که قوانین را اعمال می کند ، می تواند فقط در ماشه ذخیره و نگهداری شود ، نه در هر برنامه مشتری. برای استفاده های دیگر محرک ها ، به Database Oracle PL/SQL مرجع زبان مراجعه کنید.
ایجاد محرک ها
برای ایجاد محرک ها ، یا از ابزار SQL Developer Create Trigger یا عبارت DDL Create Trigger استفاده کنید. این بخش نحوه استفاده از هر دو روش برای ایجاد محرک ها را نشان می دهد.
به طور پیش فرض ، یک ماشه در حالت فعال ایجاد می شود. برای ایجاد یک ماشه در حالت معلول ، از بیانیه ایجاد Trigger با بند غیرفعال استفاده کنید.
برای ایجاد محرک ها ، باید امتیازات مناسبی داشته باشید. با این حال ، برای این بحث ، شما به این اطلاعات اضافی احتیاج ندارید.
این بخش شامل:
- درباره شبه های قدیمی و جدید
- آموزش: ایجاد ماشه ای که جدول را تغییر می دهد
- آموزش: ایجاد ماشه ای که قبل از درج آن یک کلید اصلی برای یک ردیف ایجاد می کند
- ایجاد به جای ماشه
- آموزش: ایجاد محرک هایی که ورود به سیستم و رویدادهای ورود به سیستم
برای انجام آموزش های موجود در این سند ، شما باید به عنوان HR کاربر از SQL Developer به Oracle Database Express Edition متصل شوید.
- راهنمای کاربر توسعه دهنده Oracle SQL برای اطلاعات در مورد جعبه های گفتگوی SQL Developer برای ایجاد اشیاء
- Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد بیانیه ایجاد ماشه
- "ویرایش اسکریپت های نصب که باعث ایجاد محرک می شوند"
درباره شبه های قدیمی و جدید
هنگامی که یک محرک سطحی ردیف آتش می گیرد ، سیستم زمان اجرا PL/SQL دو شبه پیرمرد قدیمی و جدید را ایجاد و جمع می کند. آنها به دلیل داشتن برخی از خصوصیات سوابق ، آنها را به عنوان Pseudorecords نامیده می شوند.
برای ردیفی که ماشه در حال پردازش است:
- برای یک ماشه درج ، قدیمی حاوی مقادیر نیست و جدید حاوی مقادیر جدید است.
- برای یک ماشه به روزرسانی ، Old شامل مقادیر قدیمی است و NEW حاوی مقادیر جدید است.
- برای یک ماشه حذف ، قدیمی حاوی مقادیر قدیمی است و جدید هیچ مقداری ندارد.
برای مراجعه به یک شبه ، یک روده بزرگ را قبل از نام خود قرار دهید-قدیمی یا: جدید در مثال 6-1.
Oracle Database PL/SQL مرجع زبان برای کسب اطلاعات بیشتر در مورد شبه قدیمی و جدید
آموزش: ایجاد ماشه ای که جدول را تغییر می دهد
این آموزش نحوه استفاده از عبارت Create Trigger را برای ایجاد یک ماشه ، eval_change_trigger نشان می دهد ، که هر زمان که یک درج ، به روزرسانی یا حذف عبارت باشد ، یک ردیف را به جدول ارزیابی می کند. جدول ارزیابی ها را تغییر می دهد.
ماشه پس از اجرای بیانیه تحریک ، ردیف را اضافه می کند و از پیش بینی های مشروط درج ، به روزرسانی و حذف استفاده می کند تا مشخص کند کدام یک از سه جمله DML ممکن است ماشه را اخراج کند.
eval_change_trigger یک ماشه در سطح بیانیه و یک ماشه پس از آن است.
برای ایجاد ارزیابی_LOG و EVALL_CHANGE_TRIGGER:
- جدول ارزیابی ها را ایجاد کنید:
ایجاد جدول ارزیابی_LOG (تاریخ log_date ، عمل varchar2 (50)) ؛
Trigger Eval_Change_Trigger را ایجاد یا جایگزین کنیدبعد ازدرج یا به روزرسانی یا حذف در ارزیابی ها اعلام کنید ارزیابی log_action_log. action ٪ نوع ؛اگر شروع کنیددرجسپس log_action: = 'insert' ؛السیفدر حال بروز رسانیسپس log_action: = 'به روز رسانی' ؛السیفحذفسپس log_action: = 'حذف' ؛در غیر این صورت dbms_output. put_line ("این کد قابل دستیابی نیست.") ؛پایان اگر ؛مقادیر ارزیابی را به ارزیابی_log (log_date ، عمل) وارد کنید (sysdate ، log_action) ؛پایان؛Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد پیش بینی های مشروط
آموزش: ایجاد ماشه ای که قبل از درج آن یک کلید اصلی برای یک ردیف ایجاد می کند
ارزیابی توالی_ توالی (ایجاد شده در "آموزش: ایجاد یک دنباله") کلیدهای اصلی را برای جدول ارزیابی ها ایجاد می کند (ایجاد شده در "ایجاد جداول"). با این حال ، این کلیدهای اصلی به طور خودکار در جدول قرار نمی گیرند.
این آموزش نحوه استفاده از توسعه دهنده SQL Developer Creation Trigger را برای ایجاد ماشه ای به نام new_evaluation_trigger نشان می دهد ، که قبل از قرار دادن یک ردیف در جدول ارزیابی ها آتش می گیرد و با استفاده از ارزیابی ها_ توالی ، تعداد منحصر به فردی را برای کلید اصلی آن ردیف ایجاد می کند. ماشه یک بار برای هر ردیف تحت تأثیر بیانیه درج تحریک آتش می گیرد.
new_evaluation_trigger یک ماشه سطح ردیف و قبل از ماشه است.
برای ایجاد ماشه New_evaluation:
- در قاب اتصالات ، HR_CONN را گسترش دهید.
- در لیست انواع شیء Schema ، محرک های راست کلیک کنید.
- در لیست گزینه ها ، روی Trigger New کلیک کنید.
- در پنجره Create Trigger:
- در قسمت نام ، New_evaluation_trigger را بر روی مقدار پیش فرض Trigger1 تایپ کنید.
- برای Object Base ، ارزیابی ها را از منو انتخاب کنید.
- Move INSERT from Available Events to Selected Events. (Select INSERT and click> .)
- سطح بیانیه گزینه را انتخاب کنید.
- OK را کلیک کنیدصفحه New_evaluation_Trigger باز می شود ، بیانیه Create Trigger را نشان می دهد که ماشه را ایجاد می کند:
ایجاد یا جایگزینی ماشهnew_evaluation_triggerقبل از درج کردنارزیابیبرای هر ردیف شروع خالی; پایان;
: new. evaluation_id: = ارزیابی ها_ نفر. nextval
ایجاد به جای ماشه
یک نمای خروجی یک پرس و جو را به عنوان جدول ارائه می دهد. اگر می خواهید یک دیدگاه را تغییر دهید زیرا یک جدول را تغییر می دهید ، پس باید به جای محرک ایجاد کنید. آنها به جای تغییر نمای ، میزهای زیرین را تغییر می دهند.
به عنوان مثال ، View EMP_LOCATIONS را در نظر بگیرید ، که ستون نام آنها از ستون های Last_name و First_name جدول کارمندان ایجاد شده است:
View EMP_LOCATIONS را به عنوان E. Employee_id انتخاب کنید ،e. last_name ||'،' ||نام E. First_name، D. Department_Name Department ، L. City City ، C. Country_name کشور ازکارمندان، بخش های D ، مکان های L ، کشورهای C که در آن e. department_id = d. department_id و d. location_id = l. location_id و l. country_id = country_id ترتیب توسط last_name ؛
برای به روزرسانی View EMP_LOCATIONS. نام (ایجاد شده در "ایجاد نمای با بیانیه ایجاد نمای") ، باید کارمندان را به روز کنید. آخرین_ نام و کارمندان. نام کوچک . این همان کاری است که به جای ماشه در مثال 6-1 انجام می دهد.
جدید و قدیمی شبهه های شبه ای هستند که موتور زمان اجرا PL/SQL هر زمان که یک سطح ردیف باعث آتش سوزی شود ، ایجاد و جمع می کند. فروشگاه های قدیمی و جدید به ترتیب مقادیر اصلی و جدید را از سابقه پردازش شده توسط ماشه پردازش می کنند. آنها به آنها شبه رکورد گفته می شود زیرا همه خصوصیات سوابق PL/SQL را ندارند.
مثال 6-1 ایجاد به جای ماشه
Trigger Update_Name_View_Trigger را ایجاد یا جایگزین کنیدبه جای به روزرسانی در emp_locationsشروعکارمندان را به روز کنید first_name = subtr (: new. name ، inster (: new. name ، '،') +2) last_name = subtr (: new. name ، 1 ، inster (: new. name ، '،')-1) جایی که کارمند_ید =: old. employee_id ؛پایان؛
- Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد به جای محرک ها
- Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد قدیمی و جدید
آموزش: ایجاد محرک هایی که ورود به سیستم و رویدادهای ورود به سیستم
این آموزش نحوه استفاده از عبارت Create Trigger را برای ایجاد دو محرک ، HR_LOGON_TRIGGER و HR_LOGOFF_TRIGGER نشان می دهد. بعد از اینکه شخصی به عنوان کاربر کاربر وارد می شود ، HR_LOGON_TRIGGER یک ردیف به جدول HR_USERS_LOG اضافه می کند. قبل از اینکه شخصی به عنوان کاربر کاربر خاموش شود ، HR_LOGOFF_TRIGGER یک ردیف به جدول HR_USERS_LOG اضافه می کند.
HR_LOGON_TRIGGER و HR_LOGOFF_TRIGGER محرک سیستم هستند. HR_LOGON_TRIGGER یک ماشه است و HR_LOGOFF_TRIGGER قبل از ماشه است.
برای ایجاد HR_USERS_LOG ، HR_LOGON_TRIGGER و HR_LOGOFF_TRIGGER:
- جدول HR_USERS_LOG را ایجاد کنید:
ایجاد جدول HR_USERS_LOG (user_name varchar2 (30) ، فعالیت varchar2 (20) ، تاریخ event_date) ؛
Trigger HR_LOGON_TRIGGER را ایجاد یا جایگزین کنیدبعد از ورود به سیستم در Hr. Schemaشروع را به مقادیر hr_users_log (user_name ، فعالیت ، event_date) (کاربر ، "ورود" ، sysdate) وارد کنید. پایان؛
Trigger HR_LOGOFF_TRIGGER را ایجاد یا جایگزین کنیدقبل از ورود به سیستم در Hr. Schemaشروع را به مقادیر HR_USERS_LOG (user_name ، فعالیت ، event_date) (کاربر ، "logoff" ، sysdate) شروع کنید. پایان؛
Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد محرک های سیستم
تغییر محرک ها
برای تغییر یک ماشه ، یا از ویرایش ابزار SQL Developer یا عبارت DDL با بند یا جایگزین استفاده کنید.
برای تغییر ماشه با استفاده از ابزار ویرایش:
- در قاب اتصالات ، HR_CONN را گسترش دهید.
- در لیست انواع شیء طرحواره ، محرک ها را گسترش دهید.
- در لیست محرک ها ، روی ماشه کلیک کنید تا تغییر کند.
- در قاب سمت راست قاب اتصالات ، صفحه کد ظاهر می شود و کدی را نشان می دهد که ماشه را ایجاد کرده است. صفحه کد در حالت نوشتن است.(با کلیک بر روی نماد مداد حالت را از حالت نوشتن برای خواندن فقط یا معکوس تغییر می دهد.)
- در صفحه کد ، کد را تغییر دهید. عنوان صفحه در قلم ایتالیایی است و نشان می دهد که این تغییر هنوز در پایگاه داده ذخیره نشده است.
- از منوی پرونده ، ذخیره را انتخاب کنید. Oracle Database Express Edition ماشه را کامپایل می کند و آن را ذخیره می کند. عنوان صفحه دیگر در قلم ایتالیایی نیست.
- "درباره بیانیه زبان تعریف داده (DDL)" برای اطلاعات عمومی که در مورد بیان یا جایگزینی Trigger اعمال می شود
- Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد بیانیه ایجاد یا جایگزینی Trigger
غیرفعال کردن و فعال کردن محرک ها
در صورت مراجعه به اشیاء موجود در دسترس نیست ، ممکن است نیاز به موقت محرک داشته باشید ، یا اگر باید مقدار زیادی از داده ها را بدون تأخیر که باعث تحریک می شود بارگذاری کنید (مانند یک عملیات بازیابی). پس از در دسترس بودن اشیاء ارجاع شده ، یا بارگذاری داده ها را به پایان رسانده اید ، می توانید محرک ها را دوباره فعال کنید.
این بخش شامل:
- غیرفعال کردن یا فعال کردن یک ماشه
- غیرفعال کردن یا فعال کردن همه محرک ها در یک جدول
- Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد بیانیه ماشه Alter
- Oracle Database SQL مرجع زبان برای اطلاعات بیشتر در مورد بیانیه جدول Alter
غیرفعال کردن یا فعال کردن یک ماشه
برای غیرفعال کردن یا فعال کردن یک ماشه واحد ، از Disable Trigger یا Enable Trigger Tool یا عبارت Alter Trigger با بند غیرفعال یا فعال کردن استفاده کنید.
به عنوان مثال ، این گفته ها Eval_Change_Trigger را غیرفعال و فعال می کنند:
ALTER TRIGGER EVAL_CHANGE_TRIGGERغیرفعال کردن؛ALTER TRIGGER EVAL_CHANGE_TRIGGERفعال کردن;
برای استفاده از Trigger غیرفعال یا فعال کردن ابزار ماشه:
- در قاب اتصالات ، HR_CONN را گسترش دهید.
- در لیست انواع شیء طرحواره ، محرک ها را گسترش دهید.
- در لیست محرک ها ، روی ماشه مورد نظر راست کلیک کنید.
- در لیست گزینه ها ، Dispable یا Enable را انتخاب کنید.
- در پنجره غیرفعال یا فعال کردن ، روی Apply کلیک کنید.
- در پنجره تأیید ، روی OK کلیک کنید.
غیرفعال کردن یا فعال کردن همه محرک ها در یک جدول
برای غیرفعال کردن یا فعال کردن همه محرک ها در یک جدول خاص ، از غیرفعال کردن همه محرک ها استفاده کنید یا همه ابزار محرک را فعال کنید یا بیانیه جدول Alter را با غیرفعال کردن همه محرک ها یا فعال کردن بند همه محرک ها.
به عنوان مثال ، این بیانیه ها همه محرک ها را در جدول ارزیابی ها غیرفعال و فعال می کنند:
ارزیابی جدولهمه محرک ها را غیرفعال کنید؛ارزیابی جدولهمه محرک ها را فعال کنید;
برای استفاده از غیرفعال کردن همه محرک ها یا فعال کردن همه ابزار محرک:
- در قاب اتصالات ، HR_CONN را گسترش دهید.
- در لیست انواع شیء طرحواره ، جداول را گسترش دهید.
- در لیست جداول ، روی جدول مورد نظر راست کلیک کنید.
- در لیست گزینه ها ، محرک ها را انتخاب کنید.
- در لیست گزینه ها ، غیرفعال کردن All یا فعال کردن همه را انتخاب کنید.
- در غیرفعال کردن همه یا فعال کردن پنجره ، روی Apply کلیک کنید.
- در پنجره تأیید ، روی OK کلیک کنید.
در مورد تدوین و وابستگی های ماشه
اجرای یک عبارت ایجاد کننده ایجاد ماشه ایجاد شده است. اگر این تدوین باعث خطایی شود ، سپس بیانیه ایجاد ماشه از بین می رود. برای دیدن خطاهای تدوین ، از این جمله استفاده کنید:
* را از user_errors که در آن نوع = 'trigger' ؛
محرک های کامپایل شده به اشیاء طرحواره ای که در آن تعریف شده اند بستگی دارد. به عنوان مثال ، new_evaluation_trigger به جدول ارزیابی ها بستگی دارد:
ایجاد یا جایگزینیtrigger new_evaluation_triggerقبل از درجدر ارزیابیبرای هر ردیف شروع می شود: new. evaluation_id: = ارزیابی_seq. nextval ؛پایان؛
برای دیدن اشیاء طرحواره ای که به آنها وابسته است ، از این جمله استفاده کنید:
* * را از All_Dependencies انتخاب کنید که در آن نوع = 'Trigger' ؛
اگر شیئی که یک ماشه به آن بستگی داشته باشد ، یا به گونه ای تغییر یافته است که بین ماشه و جسم عدم تطابق وجود داشته باشد ، ماشه بی اعتبار می شود. دفعه بعد که از ماشه فراخوانی می شود ، مجدداً مجدداً مورد استفاده قرار می گیرد. برای بازپرداخت یک محرک بلافاصله ، از عبارت Alter Trigger با بند کامپایل استفاده کنید. مثلا:
Alter Trigger new_evaluation_triggerگردآوری;
Oracle Database PL/SQL مرجع زبان برای اطلاعات بیشتر در مورد تدوین و وابستگی های ماشه
افت محرک
شما باید قبل از رها کردن اشیاء که به آن بستگی دارد ، یک ماشه را رها کنید.
برای رها کردن یک ماشه ، از قاب اتصالات SQL Developer و Drop Tool یا Trigger DDL Drop Trigger استفاده کنید.
این عبارت ماشه emal_change_trigger را کاهش می دهد:
DROP TRIGGER EVAL_CHANGE_TRIGGER ؛
برای رها کردن ماشه با استفاده از ابزار Drop:
- در قاب اتصالات ، HR_CONN را گسترش دهید.
- در لیست انواع شیء طرحواره ، محرک ها را گسترش دهید.
- در لیست محرک ها ، روی نام ماشه کلیک راست کنید.
- در لیست گزینه ها ، روی Drop Trigger کلیک کنید.
- در پنجره Drop ، روی Apply کلیک کنید.
- در پنجره تأیید ، روی OK کلیک کنید.
- "درباره بیانیه های زبان تعریف داده (DDL)" برای اطلاعات عمومی که در مورد بیانیه ماشه Drop اعمال می شود
- Oracle Database PL/SQL مرجع زبان برای اطلاعات در مورد بیانیه Drop Trigger
آموزش تحلیل گری...
ما را در سایت آموزش تحلیل گری دنبال می کنید
برچسب :
نویسنده : ملیکا زارعی
بازدید : 39
تاريخ : سه
شنبه
6 تير
1402 ساعت: 0:03