Presentation is loading. Please wait.

Presentation is loading. Please wait.

الأزنده أ.موضي المحرج.

Similar presentations


Presentation on theme: "الأزنده أ.موضي المحرج."— Presentation transcript:

1 الأزنده أ.موضي المحرج

2 ما هو الزناد Trigger هو بلوك أو برنامج pl/sql مرتبط ب Table أو schema أو بقاعدة البيانات و يتم تنفيذه عند حدوث حدث معين. أقسام الأزندة: 1) أزندة مرتبطة بقواعد البيانات (Database Trigger). 2) أزندة مرتبطة بالتطبيقات (Application Trigger) : هو الزناد الذي تتم كتابته في النماذج باستخدام Form Builder و يتم تطبيقه عند حدوث حدث معين في التطبيق.

3 أزندة قواعد البيانات ؟ زناد قاعدة البيانات (Database Trigger): هو قطعة برمجية تنفذ تلقائياً عند إجراء عملية إدخال, حذف أو تعديل على الجدول المرفق معه هذا الزناد بغض النظر عن المستخدم أو التطبيق الذي قام بإجراء هذه العملية.

4 لماذا نستخدم الـ Triggers
1- زيادة و تقوية مستوى السرية و الأمان في قاعدة البيانات. 2- عمل شروط للتحكم في الإدخال بحيث تكون شروط متقدمة. 3- عمل توثيق للتغيرات التي تحدث على الجدول و ذلك عند تعديل أو حذف السجلات حيث يمكننا إنشاء جدول آخر يتم فيه تسجيل البيانات القديمة التي تم تعديلها أو حذفها.

5 إرشادات كتابة الزناد عند تصميم الزناد لابد لنا من مراعاة الأمور التالية : 1- نستخدم الزناد لضمان أنه عند حدوث حدث ما فإن عملاً معيناً يجب أن ينفذ. 2- نستخدم زناد قواعد البيانات للعمليات المركزية العامة مثل insert, update, delete. 3- لا نكتب زناداً يكرر أو يستبدل عملية مكتوبة و مبرمجة مسبقاً في قاعدة البيانات, مثلا لا نقوم بكتابة زناد متعلق بالمفتاح الرئيسي Primary Key. 4- استخدمي الزناد عند الحاجة دون إفراط لأن كثرة تعريف الأزندة يتسبب في تعقيدات كثيرة عند متابعة التطبيق أو صيانته.

6 إنشاء الزناد حتى نقوم بإنشاء الزناد بصورة صحيحة لا بد من تحديد العديد من الأمور قبل البدء بكتابة محتوى هذا الزناد. لذا علينا تحديد: وقت الزناد. الحدث المسبب لإطلاق الزناد. نوع الزناد (مستواه). جسم الزناد (العمل الذي يقوم به الزناد).

7 إنشاء الزناد

8 1) وقت الزناد يحدد هذا الجزء من تعريف الزناد ”متى سيتم تنفيذ الزناد“ و هناك وقتان: 1- قبل (Before): في هذه الحالة يتم تنفيذ جسم الزناد قبل حدوث عملية معالجة البيانات. 2- بعد (After): في هذه الحالة يتم تنفيذ جسم الزناد بعد حدوث عملية معالجة البيانات.

9 2) الحدث المسبب للزناد نقوم بهذا الجزء تحديد الحدث الذي سيؤدي إلى إطلاق الزناد و تنفيذه. و العمليات التي تؤدي إلى تنفيذ الزناد هي: 1- عند إدخال سجل جديد في الجدول insert. 2- عند تعديل سجل بالجدول باستخدام جملة Update. 3- عند حذف سجل من الجدول باستخدامDelete . * و تسمى هذه العمليات ” عمليات معالجة البيانات ( (DML“.

10 3) جسم الزناد يحدد هذا الجزء العمل الذي سيتم تنفيذه عندما يتم إطلاق الزناد بناءً على تنفيذ جملة معالجة بيانات معينة. ممكن أن يحتوي هذا الجزء على جمل SQL و PL/SQL و يمكن أن يحتوي على جمل لتعريف المتغيرات, الاستثناءات و غيرها.

11 الصيغة العامة لتعريف الزناد
تستخدم Replace في حالة أردنا التغيير على كود زناد معين. اسم الزناد وقت الزناد مثل: Before, After. حدث الزناد مثل: insert, update, delete. جسم الزناد (جسم)

12 أ. على مستوى جملة (Statment)
4) نوع الزناد (مستواه) تنقسم الأزندة من حيث مستوى تطبيقها إلى نوعين كما في الشكل التالي: انواع الأزندة من حيث مستواها ب. على مستوى سطر (Row) أ. على مستوى جملة (Statment)

13 أ. صيغة تعريف الزناد على مستوى جملة
هذا النوع يتم تنفيذه مرة واحدة فقط. CREATE [OR REPLACE] TRIGGER trigger_name Timing event1 [OR timing event2 Or timing event3] ON table_name PL/SQL block;

14 صيغة تعريف الزناد على مستوى جملة .. تابع
مثال: إنشاء زناد ” قبل“ على مستوى جملة بحيث تكون الاضافة على جدول الموظفين بين الساعه 8-18 فقط: SQL> CREATE OR REPLACE TRIGGER secure_emp BEFORE INSERT ON emp BEGIN IF (TO_CHAR (sysdate, ‘HH24’) NOT BETWEEN ‘08’ AND ‘18’) THEN RAISE_APPLAICATION_ERROR (-20500, ‘You may only insert into EMP during normal hours.’); END IF; END; /

15 المثال السابق يوضح انه لا يسمح بإدخال صفوف على جدول الموظفين إلا فى مواقيت العمل الرسمية وذلك فى حالة ادخال صف فى جدول الموظفين فى وقت مابين السادسة مساءاً والثامنة صباحا فانه يقوم بعمل استثناء و إفشال عملية الادخال.

16 ب. صيغة تعريف الزناد على مستوى سطر
CREATE [OR REPLACE] TRIGGER trigger_name Timing event1 [OR timing event2 Or timing event3] ON table_name [ REFERENCING OLD AS OLD | NEW AS new] FOR EACH ROW [WHEN condition] PL/SQL block;

17 صيغة تعريف الزناد على مستوى سطر .. تابع
يتم تنفيذه في كل مرة نقوم بإجراء تعديل أو حذف أو إدخال سجل جديد وفيه يمكننا أن نشير إلى قيمة أي حقل باستخدام المعاملين New & Old في عمود ما , وفيه نستخدم جملة For Each Row. الكلمتان New , Old تستخدمان فقط في الزناد المعرف على مستوى سطر. بحيث: - Old: يشير إلى القيمة القديمة (أي قيمة الحقل قبل التعديل أو الحذف). - New: يشير إلى القيمة الجديدة (أي قيمة الحقل بعد التعديل أو القيمة الجديدة المراد إدخالها).

18 صيغة تعريف الزناد على مستوى سطر .. تابع
مثال: في المثال يقوم بإنشاء زناد يعمل على الادخال و التحديث للراتب في جدول الموظفين , بحيث في جملة if إذا لم تكن الوظيفة الجديدة بين الوظائف ('AD_Pres' ,'AD_VP') و الراتب الجديد أكبر من فإنه يتم إيقاف العملية و عدم استكمال التحديث أو الإدخال.

19 إدارة الأزندة Triggers
عندما نقوم بكتابة ال Database Triggers نحتاج لعمل الأشياء التالية: 1- معرفة الTriggers الموجودة حالياً. 2- تمكين أو عدم تمكين Triggers من العمل. 3- حذف Triggers. وللتعامل مع كل هذه الأشياء يوفر لنا الأوراكل جدول عروض View يتم فيه حفظ كل البيانات والمعلومات عن كل ال Triggers للمستخدم. وهذا ال View يعرف باسم User_triggers وتوصيفه كالتالي:- SQL> desc user_triggers Name Null? Type TRIGGER_NAME NOT NULL VARCHAR2(30) TRIGGER_TYPE VARCHAR2(16) TRIGGERING_EVENT VARCHAR2(26)

20 إدارة الأزندة Triggers

21 مثال 1: لمعرفة الـTriggers الموجودة حالياً و المرتبطة بجدول Emp:
SQL> select trigger_name,triggering_event,trigger_type 2 from user_triggers 3 where table_name = 'EMP'; TRIGGER_NAME TRIGGERING_EVENT TRIGGER_TYPE EMPNO_COUNTER INSERT BEFORE EACH ROW EMP_HISTORICAL_LOG UPDATE OR DELETE AFTER EACH ROW EMP_SECURITY UPDATE BEFORE EACH ROW JUST_TWO_ANALIST INSERT OR UPDATE BEFORE EACH ROW SALES_COMM INSERT OR UPDATE BEFORE EACH ROW

22 مثال 2: لمعرفة نوع الTriggers نقوم بتنفيذ الأمر التالي:
SQL> select description from user_triggers 2 where trigger_name = 'SALES_COMM'; عند تنفيذ الأمر أعلاه سوف تظهر النتيجة كالتالي:- sales_comm before insert or update on emp for each row اسم الTrigger المراد الاستعلام عن نوعه

23 تمكين و عدم تمكين الـ Trigger
أحياناً قد نحتاج لعدم تمكين ال Trigger وذلك بجعله DISEABLE ، وعادةً ما نحتاج هذا الأمر عندما يحدث أمر طارئ ونريد أن نتخطى عمل ال Trigger . مع ملاحظة أن نرجعه إلى حالته الأولى فور الانتهاء من هذا الأمر الطارئ و نختار ENABLE لإعادة تمكينه. ALTER TRIGGER trigger_name < ENABLE | DISABLE > ; لتفعيل أو تعطيل كل الأزندة المعرفة على جدول ما نستخدم الأمر: ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS;

24 تمكين و عدم تمكين الـ Trigger.. تابع
مثال 1: قومي بتمكين الزناد secure_emp ؟ ALTER TRIGGER secure_emp enable ; مثال 2: قومي بعدم تمكين الزناد secure_emp ؟ ALTER TRIGGER secure_emp disable ; مثال 3: فعّلي جميع الأزندة المعرفة على جدول emp ؟ ALTER TABLE emp ENABLE ALL TRIGGERS;

25 حذف الTriggers ملاحظة: DROP TRIGGER trigger_name ;
مثال: قومي بحذف الزناد secure_emp المرتبط في جدول emp DROP TRIGGER secure_emp; ملاحظة: في حالة حذف جدول من قاعدة البيانات سيتم حذف جميع الأزندة المرتبطة به تلقائياً.

26


Download ppt "الأزنده أ.موضي المحرج."

Similar presentations


Ads by Google