آموزش زبان PL/SQL (تریگر یا Trigger) - درس ششم ......

نوشته شده توسط :
آموزش زبان PL/SQL (تریگر یا Trigger) - درس ششم ......

10-  تریگر Trigger  :

در تعریف کلی از تریگر 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 :

1- معرفی

2- برای شروع به کار با PL/SQL به چه چیزی نیاز داریم

3- بررسی اجمالی PL / SQL

4- عبارات ساده PL / SQL

4.1- معرفی If-elsif-else

4.2- معرفی LOOP

4.3- معرفی FOR LOOP

4.4- معرفی WHILE LOOP

5- کار با PL/SQL در ابزار PL/SQL Developer

6- معرفی انواع داده های PL/SQLمتداول

6.1- نوع داده عددی در pl/sql

6.2- انواع داده متن

6،4- تعریف متغیر با type%

6،5- تعریف متغیر با Rowtype%

6،6- تعریف متغیر از نوع رکورد

6،7- تعریف متغیر از نوع جدول   (table)

6،8- تعریف متغیر از نوع آرایه (Array)

7- Cursor (مکان نمای)

7.1- Cursor (مکان نمای) چیست؟

7،2- Explicit cursor (مکان نمای صریح)

7،3- Implicit cursor (مکان نمای غیر صریح یا ضمنی)

8 - پروسیجر یا Stored procedure

9- توابع یا Function

10- تریگر Trigger

11- معرفی پکیج

11،1- ساخت پکیج در PL/SQL Developer

11،2- تست پکیج

معرفی اوراکل اپکس (oracle apex)