أسامة موسى بتاريخ: 20 أبريل 2006 تقديم بلاغ مشاركة بتاريخ: 20 أبريل 2006 السلام عليكم ورحمة وبركاتهالدرس الثاني عشرCREATE TRIGGERSسنتناول بهذا الدرس ان شاء الله كيفية انشاء التريجر على قاعدة البيانات وكيفية التعامل معها وماهي انواعها وكيفية تعريف التريجرتعرف التريجر على انها الحدث الذي ينفذ اثناء حدوث تغيير على جدول معين بقاعدة البيانات لتنفيذ مجموعة من التعليمات او لأخذ معلومات واضافتها بجدول آخر او استدعاء PROCEDURE او حتى استدعاء FUNCTION تم انشائها على قاعدة البياناتقاعدة انشاء التريجر CREATE or REPLACE TRIGGER trigger_name TRIGGER TYPE ON table_name [ FOR EACH ROW ] DECLARE -- variable declarations BEGIN -- trigger code EXCEPTION WHEN ... -- exception handling END; وسوف نشرح كيفية التعامل معهاCREATE or REPLACE TRIGGER trigger_nameهنا نقوم بعمل او تبديل الTriggerكتب CREATE OR REPLACE ثم نكتب TRIGGER نكتب اسم الTRIGGER وفائدة الREPLACE هنا لتبديل الTRIGGER القديم بالTRIGGER الجديد الذي نريد انشائهTRIGGER TYPEنوع التريجر وهي انواع Insert Triggers و Update Trigger و Delete Trigger وسوف نستعرض هذه الانواع بالتفصيلON table_nameوهنا تضع اسم الجدول [ FOR EACH ROW ]معناها لكل سطر يضافمع ملاحظة ان :1-لاتستطيع انشاء هذه الانواع من التريجرات على views2-يمكن التعديل على new داخل التريجر3-لا يمكن التعديل على old داخل التريجروالباقي هو عبارة عن اضافة المتغيرات او التحكم بجزئية الجداول والسيطرة على البيانات المدخلةوفي هذه الجزئية ممكن ان تستدعي بروسيجر او فانكشنواول انواع التريجر هو Insert Triggersوهو نوعانالنوع الاولBEFORE INSERT Trigger 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; مثال عليهاذا قمنا بانشاء هذا الجدول CREATE TABLE orders ( order_id number(5), quantity number(4), cost_per_item number(6,2), total_cost number(8,2), create_date date, created_by varchar2(10) ); ننشئ هذا التريجر CREATE OR REPLACE TRIGGER orders_before_insert BEFORE INSERT ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- ايجاد اسم المستخدم SELECT user INTO v_username FROM dual; -- تعديل تاريخ التعديل حيث new ترمز الى قيمة جديدة :new.create_date := sysdate; -- هنا نضيف اسم المستخدم الجديد حيث استخدمنا new لنضع القيمة الجديدة وهو عبارة باراميتر INSERT :new.created_by := v_username; END; النوع الثاني AFTER 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; مثال عليهننشئ هذا الجدول: CREATE TABLE orders ( order_id number(5), quantity number(4), cost_per_item number(6,2), total_cost number(8,2) ); ننشئ تريجر after insert: CREATE OR REPLACE TRIGGER orders_after_insert AFTER INSERT ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing the INSERT into the table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity, cost_per_item, total_cost, username ) VALUES ( :new.order_id, :new.quantity, :new.cost_per_item, :new.total_cost, v_username ); END اما الانواع الباقيه فهي نفس ما سبق واكتفي بعرض مثال على كل منهاWe could then create a BEFORE/AFTER UPDATE trigger as follows: CREATE OR REPLACE TRIGGER orders_before_update BEFORE UPDATE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing UPDATE on the table SELECT user INTO v_username FROM dual; -- Update updated_date field to current system date :new.updated_date := sysdate; -- Update updated_by field to the username of the person performing the UPDATE :new.updated_by := v_username; END; We could then create an BEFORE/AFTER DELETE trigger as follows: CREATE OR REPLACE TRIGGER orders_after_delete AFTER DELETE ON orders FOR EACH ROW DECLARE v_username varchar2(10); BEGIN -- Find username of person performing the DELETE on the table SELECT user INTO v_username FROM dual; -- Insert record into audit table INSERT INTO orders_audit ( order_id, quantity, cost_per_item, total_cost, delete_date, deleted_by) VALUES ( :old.order_id, :old.quantity, :old.cost_per_item, :old.total_cost, sysdate, v_username ); END; كيفية حذف التريجرDrop a Trigger DROP TRIGGER trigger_name; مثال DROP TRIGGER orders_before_insert; ايقاف عمل التريجر DISABLE ALTER TRIGGER trigger_name DISABLE; مثال ALTER TRIGGER orders_before_insert DISABLE; ايقاف عمل جميع التريجرات على الجدول ALTER TABLE table_name DISABLE ALL TRIGGERS; مثال ALTER TABLE orders DISABLE ALL TRIGGERS; تفعيل عمل التريجر ALTER TRIGGER trigger_name ENABLE; مثال ALTER TRIGGER orders_before_insert ENABLE; تفعيل عمل جميع التريجرات على الجدول ALTER TABLE table_name ENABLE ALL TRIGGERS; مثال ALTER TABLE orders ENABLE ALL TRIGGERS; انتهى الدرسالدرس الحادي عشر.... القائمة الرئيسية .... الدرس الثالث عشر 1 اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
waleed21112001 بتاريخ: 21 أبريل 2006 تقديم بلاغ مشاركة بتاريخ: 21 أبريل 2006 الله يجزيك خيراا ... ويزوجك بكرااا ... وياتيك من البنين والبنات عشراااعلى هذا المجهود العظيم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
mdsalah بتاريخ: 2 يونيو 2006 تقديم بلاغ مشاركة بتاريخ: 2 يونيو 2006 مشكور اخى الفاضل واتمنى منك مزيد العطاء وجازاك الله خيرا وشكرا لهذا الموقع الاكثر من رائع ومزيد من التقدم MDSALAH اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
medohadido بتاريخ: 1 سبتمبر 2006 تقديم بلاغ مشاركة بتاريخ: 1 سبتمبر 2006 شكرا على المجهود العظيم ونتمنى لك المزيد من التفوق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
osama80 بتاريخ: 29 نوفمبر 2006 تقديم بلاغ مشاركة بتاريخ: 29 نوفمبر 2006 بارك الله فيك اخي الفاضل و اتمنى من الله ان يتم عليكم بثمرة هذا العمل و تحمل أمانة العلم اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
wlahmad بتاريخ: 12 يناير 2007 تقديم بلاغ مشاركة بتاريخ: 12 يناير 2007 ماشاء الله عليك استاذي الفاضلشرح كامل وبسيط وسهللاحرمت اجره اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
جلال شواقفه بتاريخ: 31 أكتوبر 2007 تقديم بلاغ مشاركة بتاريخ: 31 أكتوبر 2007 وفقك الله لكل ما هو خير اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
AHMADBROOKLYN بتاريخ: 25 أبريل 2016 تقديم بلاغ مشاركة بتاريخ: 25 أبريل 2016 مشكور اخي اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.