مدیریت Trigger در پایگاه داده اوراکل

زهیر صفری 1403/07/08 0 22
لینک کوتاه https://zoheirsoftware.com/z/2c7a6f4 |
مدیریت Trigger در پایگاه داده اوراکل,ایجاد Trigger در پایگاه داده اوراکل,انواع Trigger در پایگاه داده اوراکل

مدیریت Trigger در پایگاه داده اوراکل

Trigger در پایگاه داده اوراکل یک نوع شیء پایگاه داده است که به صورت خودکار در پاسخ به یک رویداد خاص بر روی یک جدول یا نما (View) اجرا می‌شود.

این رویدادها می‌توانند شامل دستورات INSERT، UPDATE یا DELETE باشند.

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

 

مدیریت Trigger در پایگاه داده اوراکل

 

ایجاد Trigger در پایگاه داده اوراکل

برای ایجاد Trigger در پایگاه داده اوراکل، باید از دستور CREATE TRIGGER استفاده کنید.

یک Trigger به شما امکان می‌دهد که به صورت خودکار، در هنگام وقوع یک رویداد خاص (مانند INSERT، UPDATE یا DELETE بر روی یک جدول یا نما) کدی را اجرا کنید.

این Trigger می‌تواند قبل یا بعد از وقوع این رویدادها اجرا شود.

 

مراحل ایجاد Trigger در پایگاه داده اوراکل

  • تعیین زمان اجرای Trigger

    باید مشخص کنید که Trigger قبل (BEFORE) یا بعد (AFTER) از وقوع رویداد اجرا شود.
  • تعیین نوع رویداد

    باید نوع عملیات DML را مشخص کنید که می‌تواند INSERT، UPDATE، یا DELETE باشد.
  • تعریف بدنه Trigger

    در این بخش باید منطق و کد PL/SQL که قرار است در زمان وقوع رویداد اجرا شود، تعریف گردد.

 

مراحل ایجاد Trigger در پایگاه داده اوراکل

 

اجزای اصلی یک Trigger در پایگاه داده اوراکل

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

  • رویداد (Event)

    رویدادی که باعث اجرای Trigger می‌شود، مانند INSERT، UPDATE یا DELETE.
  • زمان‌بندی (Timing)

    مشخص می‌کند که Trigger قبل (BEFORE) یا بعد (AFTER) از اجرای رویداد اجرا می‌شود.
  • سطح (Level)

    می‌تواند برای هر ردیف (ROW) یا برای کل عملیات (STATEMENT) اجرا شود.
  • بدنه (Body)

    کدی که باید اجرا شود، معمولاً در قالب یک بلوک PL/SQL نوشته می‌شود.

 

 

اجزای اصلی یک Trigger در پایگاه داده اوراکل

 

ساختار کلی Trigger

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF}
{INSERT | UPDATE | DELETE}
ON table_name
[FOR EACH ROW]
[WHEN (condition)]
DECLARE
   -- variable declarations (if needed)
BEGIN
   -- trigger logic
EXCEPTION
   -- exception handling (if needed)
END;



اجزای این ساختار:

  • CREATE [OR REPLACE] TRIGGER: این دستور Trigger جدیدی ایجاد می‌کند یا اگر Trigger با همین نام وجود داشته باشد، آن را جایگزین می‌کند.
  • BEFORE | AFTER | INSTEAD OF: تعیین می‌کند که Trigger قبل یا بعد از اجرای رویداد یا به جای آن اجرا شود. در Views، فقط INSTEAD OF پشتیبانی می‌شود.
  • INSERT | UPDATE | DELETE: نوع عملیاتی که باعث اجرای Trigger می‌شود.
  • ON table_name: تعیین می‌کند که Trigger روی کدام جدول یا نما اعمال می‌شود.
  • FOR EACH ROW: اگر Trigger برای هر ردیف از داده‌ها اعمال شود، این گزینه استفاده می‌شود. اگر حذف شود، Trigger برای کل دستور اعمال خواهد شد.
  • WHEN (condition): شرط اختیاری که در صورت برقرار بودن، Trigger اجرا می‌شود.
  • DECLARE: در این بخش می‌توانید متغیرهای محلی را تعریف کنید (اختیاری است).
  • BEGIN ... END: بلوک کد PL/SQL که منطق Trigger را پیاده‌سازی می‌کند.
  • EXCEPTION: بخش اختیاری برای مدیریت خطاها.

 

انواع Trigger در پایگاه داده اوراکل

  • BEFORE Trigger

    قبل از اجرای عملیات (INSERT, UPDATE, DELETE) بر روی یک جدول اجرا می‌شود.
    این نوع Trigger برای اعتبارسنجی یا تغییر داده‌ها قبل از ذخیره‌سازی در پایگاه داده مفید است.
  • AFTER Trigger

    بعد از اجرای عملیات (INSERT, UPDATE, DELETE) بر روی یک جدول اجرا می‌شود.
    این نوع Trigger برای انجام عملیاتی مانند نوشتن داده‌ها در جداول لاگ یا به‌روز کردن جداول دیگر مناسب است.
  • INSTEAD OF Trigger

    به جای اجرای عملیات مورد نظر (مانند INSERT, UPDATE, DELETE) بر روی یک نما (View) اجرا می‌شود.
    این نوع Trigger برای ایجاد قابلیت تغییر در نماهای پیچیده مفید است.
  • Row-Level Trigger

    برای هر ردیف از داده‌های تحت تأثیر یک عملیات اجرا می‌شود.
    در این نوع Trigger از کلمات کلیدی :NEW و :OLD برای دسترسی به مقادیر جدید و قدیم استفاده می‌شود.
  • Statement-Level Trigger

    یک بار برای کل دستور (نه برای هر ردیف) اجرا می‌شود.

 

انواع Trigger در پایگاه داده اوراکل

 

 

مثال‌های عملی از Trigger‌ها  در پایگاه داده اوراکل

  • BEFORE INSERT Trigger

    این Trigger قبل از وارد کردن داده جدید به جدول اجرا می‌شود و مقدار یک فیلد را به صورت خودکار تنظیم می‌کند:
CREATE OR REPLACE TRIGGER set_default_salary
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
   IF :NEW.salary IS NULL THEN
      :NEW.salary := 3000;
   END IF;
END;



در این مثال، قبل از اینکه داده جدید در جدول employees درج شود، Trigger بررسی می‌کند که اگر ستون salary خالی باشد، مقدار پیش‌فرض 3000 را تنظیم کند.

  • AFTER UPDATE Trigger

    این Trigger بعد از به‌روزرسانی اطلاعات یک کارمند در جدول employees، تغییرات را در جدول دیگری به عنوان گزارش ثبت می‌کند:

 

CREATE OR REPLACE TRIGGER log_salary_change
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
   INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
   VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END;


در این مثال، بعد از به‌روزرسانی حقوق کارمند در جدول employees، Trigger تغییرات را در جدول salary_changes ثبت می‌کند.

  • INSTEAD OF Trigger:

    این Trigger به جای اجرای یک دستور DELETE روی یک نما، روی جداول مربوطه عملیات حذف را اجرا می‌کند:

 

CREATE OR REPLACE TRIGGER instead_of_delete_on_view
INSTEAD OF DELETE ON employee_view
FOR EACH ROW
BEGIN
   DELETE FROM employees WHERE employee_id = :OLD.employee_id;
END;


این مثال نشان می‌دهد که چگونه می‌توان با استفاده از Trigger روی یک نما، تغییرات را بر روی جداول زیرین اعمال کرد.


مدیریت Trigger‌ها در پایگاه داده اوراکل

  •  فعال‌سازی و غیرفعال‌سازی Trigger‌ها

    می‌توانید Trigger‌ها را فعال یا غیرفعال کنید.
    این قابلیت به شما امکان می‌دهد که در مواقع خاص، بدون حذف کردن Trigger، آن را به طور موقت غیرفعال کنید.

غیرفعال کردن Trigger:

ALTER TRIGGER trigger_name DISABLE;
فعال کردن Trigger:
sql
Copy code
ALTER TRIGGER trigger_name ENABLE;


غیرفعال کردن تمام Triggerهای یک جدول:

 

ALTER TABLE table_name DISABLE ALL TRIGGERS;


فعال کردن تمام Triggerهای یک جدول:

 

ALTER TABLE table_name ENABLE ALL TRIGGERS;
  •  حذف Trigger

    اگر دیگر نیازی به Trigger نداشتید، می‌توانید آن را با دستور DROP TRIGGER حذف کنید:
DROP TRIGGER trigger_name;


این دستور Trigger مشخص شده را از پایگاه داده حذف می‌کند.

  • مشاهده Triggerهای تعریف شده

    برای مشاهده Triggerهای موجود در پایگاه داده، می‌توانید از جداول دید سیستمی مانند USER_TRIGGERS یا ALL_TRIGGERS استفاده کنید:
SELECT trigger_name, table_name, status
FROM user_triggers;



این کوئری فهرستی از Trigger‌های موجود در پایگاه داده را به همراه وضعیت فعال یا غیرفعال آن‌ها نمایش می‌دهد.

  • تغییر در Trigger

    اگر نیاز باشد Trigger‌ی را تغییر دهید، می‌توانید از دستور CREATE OR REPLACE TRIGGER استفاده کنید. این دستور Trigger موجود را با نسخه جدید جایگزین می‌کند:

 

CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
   -- logic
END;


مدیریت خطاها در Trigger‌ها

مانند هر برنامه PL/SQL، ممکن است در اجرای Trigger‌ها نیز خطا رخ دهد.

برای مدیریت خطاها در یک Trigger، می‌توانید از بلوک EXCEPTION استفاده کنید.

این بخش امکان مدیریت انواع مختلف خطاها را فراهم می‌کند.

مثال از مدیریت خطا:

 

CREATE OR REPLACE TRIGGER handle_errors
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
   -- logic
EXCEPTION
   WHEN OTHERS THEN
      DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;


در این مثال، هر خطایی که در حین اجرای Trigger رخ دهد، با پیام خطا در خروجی ثبت می‌شود.

نکات مهم درباره Trigger‌ها

  • کارایی (Performance)

    Triggerها می‌توانند بر کارایی تأثیر منفی بگذارند، به خصوص اگر برای هر ردیف (Row-Level) اجرا شوند و تعداد زیادی عملیات بر روی جدول انجام شود.
    بنابراین، استفاده از Trigger‌ها باید با دقت و بهینه‌سازی همراه باشد.
  • ترتیب اجرای Trigger‌ها

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

    درون یک Trigger نمی‌توان عملیات COMMIT، ROLLBACK یا SAVEPOINT را انجام داد.
    این کار برای حفظ یکپارچگی تراکنش‌ها ضروری است.

 

 

دوره های مرتبط
پکیج آموزش اوراکل,دوره آموزش پروژه محور پایگاه داده اوراکل,آموزش پایگاه داده اوراکل Oracle ,پایگاه داده اوراکل

اموزش پایگاه داده اوراکل Oracle

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

700,000 تومان

2.2k بازدید
مشاهده

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.