دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
توابع مقایسه ای در پایگاه داده اوراکل
1403/07/14 -
توابع تاریخ در پایگاه داده اوراکل
1403/07/12 -
توابع ریاضی در پایگاه داده اوراکل
1403/07/11 -
توابع رشته ای در پایگاه داده اوراکل
1403/07/10 -
مدیریت زمانبندی (Job) در پایگاه داده اوراکل
1403/07/09 -
مدیریت Trigger در پایگاه داده اوراکل
1403/07/08
مدیریت Trigger در پایگاه داده اوراکل
مدیریت Trigger در پایگاه داده اوراکل
Trigger در پایگاه داده اوراکل یک نوع شیء پایگاه داده است که به صورت خودکار در پاسخ به یک رویداد خاص بر روی یک جدول یا نما (View) اجرا میشود.
این رویدادها میتوانند شامل دستورات INSERT، UPDATE یا DELETE باشند.
Triggerها به شما این امکان را میدهند که منطق تجاری و کنترلهای اعتبارسنجی را در پایگاه داده پیادهسازی کنید و به صورت خودکار واکنشهایی به تغییرات در دادهها تعریف کنید.
ایجاد Trigger در پایگاه داده اوراکل
برای ایجاد Trigger در پایگاه داده اوراکل، باید از دستور CREATE TRIGGER استفاده کنید.
یک Trigger به شما امکان میدهد که به صورت خودکار، در هنگام وقوع یک رویداد خاص (مانند INSERT، UPDATE یا DELETE بر روی یک جدول یا نما) کدی را اجرا کنید.
این Trigger میتواند قبل یا بعد از وقوع این رویدادها اجرا شود.
مراحل ایجاد Trigger در پایگاه داده اوراکل
-
تعیین زمان اجرای Trigger
باید مشخص کنید که Trigger قبل (BEFORE) یا بعد (AFTER) از وقوع رویداد اجرا شود. -
تعیین نوع رویداد
باید نوع عملیات DML را مشخص کنید که میتواند INSERT، UPDATE، یا DELETE باشد. -
تعریف بدنه Trigger
در این بخش باید منطق و کد PL/SQL که قرار است در زمان وقوع رویداد اجرا شود، تعریف گردد.
اجزای اصلی یک Trigger در پایگاه داده اوراکل
یک Trigger در اوراکل از اجزای زیر تشکیل شده است:
-
رویداد (Event)
رویدادی که باعث اجرای Trigger میشود، مانند INSERT، UPDATE یا DELETE. -
زمانبندی (Timing)
مشخص میکند که Trigger قبل (BEFORE) یا بعد (AFTER) از اجرای رویداد اجرا میشود. -
سطح (Level)
میتواند برای هر ردیف (ROW) یا برای کل عملیات (STATEMENT) اجرا شود. -
بدنه (Body)
کدی که باید اجرا شود، معمولاً در قالب یک بلوک PL/SQL نوشته میشود.
ساختار کلی 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ها در پایگاه داده اوراکل
-
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
در دوره آموزش پایگاه داده اوراکل اصول ، مفاهیم ، طراحی ، پیادهسازی و مدیریت پایگاه داده را به صورت جامع آموزش می دهیم .