در تعریف کلی از تریگر Trigger می توان گفت که تریگر یک ساختار بلاکی در PL/SQL است که با اجرای دستورات DML بر روی جداول پابگاه داده اجرا می شود.
در زیر ساخت انواع Trigger را می بینید :
• BEFORE INSERT Trigger
• AFTER INSERT Trigger
• BEFORE UPDATE Trigger
• AFTER UPDATE Trigger
• BEFORE DELETE Trigger
• AFTER DELETE Trigger
نوع BEFORE INSERT Trigger :
این نوع در حقیقت اوراکل می خواهد Trigger قبل از عمل Insert اجرای شود.
نوع ایجاد این نوع تریگر به شکل زیر است :
CREATE [ OR REPLACE ] TRIGGER trigger_name
BEFORE INSERT
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
نکته : هنگام استفاده از از SQLPlus، شما باید در انتهای خط اسلش (\) قرار دهید. در غیر این صورت، اسکریپت اجرا نخواند شد.
توضیح پارامترهای دستور بالا :
OR REPLACE :
این پارامتر به صورت اختیار است و برای بازسازی دوباره یک Triger استفاده می شود.
trigger_name :
نام مورد نظر برای Trigger
BEFORE INSERT :
با این دستور نشان می دهید که Trigger قبل از عمل Insert اجرا می شود.
table_name :
نام جدولی که Trigger بر روی آن ساخته می شود.
ویژگی ها موجود :
1- شما نمی توانید بر روی View یک تریگر از نوع BEFORE ایجاد نمایید.
2- شما می توانید با استفاده از :NEW مقدار را آپدیت نمایید.
3- شما نمی توانید با استفاده از :OLD مقدار را آپدیت نمایید.
در زیر مثالی برای این نوع آمده است :
CREATE TABLE test
( id number(5),
quantity number(4),
cost_per number(6,2),
total_cost number(8,2),
create_date date,
created_by varchar2(10)
);
در ادامه یک Trigger نوشته خواهد شد که قبل از درج رکورد در جدول بالا مقدار create_date و created_by از طریق یک trigger وارد شود.
CREATE OR REPLACE TRIGGER test_before_insert
BEFORE INSERT
ON test
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- پیدا کردن کاربر که به دیتابیس اوراکل وارد شده است
SELECT user INTO v_username
FROM dual;
-- وارد کرد تاریخ ساخت با تابع تاریخ
:new.create_date := sysdate;
-- وارد کردن نام کاربری وارد شده در دیتابیس
:new.created_by := v_username;
END;
/
نوع AFTER INSERT Trigger :
این نوع در حقیقت اوراکل می خواهد Trigger بعد از عمل Insert اجرای شود.
نوع ایجاد این نوع تریگر به شکل زیر است :
CREATE [ OR REPLACE ] TRIGGER trigger_name
AFTER INSERT
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
توضیح پارامترهای دستور بالا :
OR REPLACE :
این پارامتر به صورت اختیار است و برای بازسازی دوباره یک Triger استفاده می شود.
trigger_name :
نام مورد نظر برای Trigger
AFTER INSERT :
با این دستور نشان می دهید که Trigger بعد از عمل Insert اجرا می شود.
table_name :
نام جدولی که Trigger بر روی آن ساخته می شود.
ویژگی ها موجود :
1- شما نمی توانید بر روی View یک تریگر از نوع AFTER نمایید.
2- شما نمی توانید با استفاده از :NEW مقدار را آپدیت نمایید.
3- شما نمی توانید با استفاده از :OLD مقدار را آپدیت نمایید.
در زیر مثالی برای این نوع آمده است :
CREATE TABLE test
( id number(5),
quantity number(4),
cost_per number(6,2),
total_cost number(8,2)
);
در این مثال ما می خواهیم پس از عمل Insert در جدول test آن رکورد به همراه کاربر سیستم در جدولی برای نگهداری سوابق درج شود.
CREATE OR REPLACE TRIGGER orders_after_insert
AFTER INSERT
ON test
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- پیدا کردن کاربر که به دیتابیس اوراکل وارد شده است
SELECT user INTO v_username
FROM dual;
-- دستور وارد کردن رکورد درج شده در جدول تست درون جدول که رویدادهای را نگهداری می کند.
INSERT INTO test_audit
( order_id,
quantity,
cost_per_item,
total_cost,
username )
VALUES
( :new.id,
:new.quantity,
:new.cost_per,
:new.total_cost,
v_username );
END;
/
نوع BEFORE UPDATE Trigger :
در این نوع اوراکل می خواهد Trigger قبل از عمل Update اجرای شود.
نوع ایجاد این نوع تریگر به شکل زیر است :
CREATE [ OR REPLACE ] TRIGGER trigger_name
BEFORE UPDATE
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
توضیح پارامترهای دستور بالا :
OR REPLACE :
این پارامتر به صورت اختیار است و برای بازسازی دوباره یک Triger استفاده می شود.
trigger_name :
نام مورد نظر برای Trigger
BEFORE UPDATE :
با این دستور نشان می دهید که Trigger قبل از عمل Update اجرا می شود.
table_name :
نام جدولی که Trigger بر روی آن ساخته می شود.
ویژگی ها موجود :
1- شما نمی توانید بر روی View یک تریگر از نوع BEFORE نمایید.
2- شما می توانید با استفاده از :NEW مقدار را آپدیت نمایید.
3- شما نمی توانید با استفاده از :OLD مقدار را آپدیت نمایید.
در زیر مثالی برای این نوع آمده است :
CREATE TABLE test
( id number(5),
quantity number(4),
cost_per number(6,2),
total_cost number(8,2),
updated_date date,
updated_by varchar2(10)
);
در ادامه یک Trigger نوشته خواهد شد که قبل از به روز رسانی رکورد جدول بالا مقدار updated_date و updated_by از طریق یک trigger وارد شود.
CREATE OR REPLACE TRIGGER test_before_insert
BEFORE INSERT
ON test
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- پیدا کردن کاربر که به دیتابیس اوراکل وارد شده است
SELECT user INTO v_username
FROM dual;
-- وارد کرد تاریخ ساخت با تابع تاریخ
:new.updated_date := sysdate;
-- وارد کردن نام کاربری وارد شده در دیتابیس
:new.updated_by := v_username;
END;
/
نوع AFTER UPDATE Trigger :
این نوع در حقیقت اوراکل می خواهد Trigger بعد از عمل UPDATE اجرای شود.
نوع ایجاد این نوع تریگر به شکل زیر است :
CREATE [ OR REPLACE ] TRIGGER trigger_name
AFTER UPDATE
ON table_name
[ FOR EACH ROW ]
DECLARE
-- variable declarations
BEGIN
-- trigger code
EXCEPTION
WHEN ...
-- exception handling
END;
توضیح پارامترهای دستور بالا :
OR REPLACE :
این پارامتر به صورت اختیار است و برای بازسازی دوباره یک Triger استفاده می شود.
trigger_name :
نام مورد نظر برای Trigger
AFTER UPDATE:
با این دستور نشان می دهید که Trigger بعد از عمل UPDATE اجرا می شود.
table_name :
نام جدولی که Trigger بر روی آن ساخته می شود.
ویژگی ها موجود :
1- شما نمی توانید بر روی View یک تریگر از نوع AFTER نمایید.
2- شما نمی توانید با استفاده از :NEW مقدار را آپدیت نمایید.
3- شما نمی توانید با استفاده از :OLD مقدار را آپدیت نمایید.
در زیر مثالی برای این نوع آمده است :
CREATE TABLE test
( id number(5),
quantity number(4),
cost_per number(6,2),
total_cost number(8,2)
);
در این مثال ما می خواهیم پس از عمل UPDATE در جدول test آن رکورد به همراه کاربر سیستم در جدولی برای نگهداری سوابق درج شود.
CREATE OR REPLACE TRIGGER orders_after_ update
AFTER INSERT
ON test
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
-- پیدا کردن کاربر که به دیتابیس اوراکل وارد شده است
SELECT user INTO v_username
FROM dual;
-- دستور وارد کردن رکورد آپدیت شده در جدول تست درون جدول که رویدادهای را نگهداری می کند.
INSERT INTO test_audit
( order_id,
quantity,
quantity_before,
quantity_after,
username )
VALUES
( :new.id,
:old.quantity,
:new.quantity,
v_username );
END;
/
آموزش PL/SQL :
2- برای شروع به کار با PL/SQL به چه چیزی نیاز داریم
5- کار با PL/SQL در ابزار PL/SQL Developer
6- معرفی انواع داده های PL/SQLمتداول
6،7- تعریف متغیر از نوع جدول (table)
6،8- تعریف متغیر از نوع آرایه (Array)
7،2- Explicit cursor (مکان نمای صریح)
7،3- Implicit cursor (مکان نمای غیر صریح یا ضمنی)
8 - پروسیجر یا Stored procedure
11- معرفی پکیج
11،1- ساخت پکیج در PL/SQL Developer
11،2- تست پکیج
معرفی اوراکل اپکس (oracle apex)