إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

الدرس الثاني عشر: انشاء التريجر على قاعدة البيانات


7 رد (ردود) على هذا الموضوع

#1 أسامة موسى

أسامة موسى

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 2,381 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 20 April 2006 - 12:40 PM

السلام عليكم ورحمة وبركاته
الدرس الثاني عشر

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-لاتستطيع انشاء هذه الانواع من التريجرات على views
2-يمكن التعديل على 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;


انتهى الدرس

الدرس الحادي عشر.... القائمة الرئيسية .... الدرس الثالث عشر
  • ابوجمانة2009 معجب بهذا
۩ اللهـــــــــــــــــــــــم صلي على سيدنا محمد وعلـى آله وصحبه أجمـعين ۩
۩ سبحـــــــــــــــــان الله وبحمده ....... سبحــــــــــــــــــــــــان الله العظيم ۩



يمكنك زيارتي على صفحتي الخاصة بالفيس بوك على الرابط AskOsama

يمكنك زيارتي على مدونتي الجديدة على الرابط http://askossama.blogspot.com

#2 waleed21112001

waleed21112001

    عضو

  • الأعضــاء
  • 45 مشاركة

تاريخ المشاركة 21 April 2006 - 04:29 PM

الله يجزيك خيراا ... ويزوجك بكرااا ... وياتيك من البنين والبنات عشرااا
على هذا المجهود العظيم

#3 mdsalah

mdsalah

    عضو نشط

  • الأعضــاء
  • 398 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 03 June 2006 - 02:55 AM

مشكور اخى الفاضل واتمنى منك مزيد العطاء وجازاك الله خيرا وشكرا لهذا الموقع الاكثر من رائع ومزيد من التقدم
MDSALAH
اهم مواضيعى

فيديو شرح كامل لتنصيب Oracle Database 10g & Developer 10g , 6i, التعليم من منظور
جديد مرئى وصوت



MY 4 shared -1
MY 4 shared -2
ستجد بهما الكثير ( سى دى اوراكل _ برامج - dba- developer)

*عظَمة عقلك تخلق لك الحساد .. وعظَمة قلبك تخلق لك الأصدقاء

#4 medohadido

medohadido

    عضو

  • الأعضــاء
  • 9 مشاركة

تاريخ المشاركة 01 September 2006 - 03:18 PM

شكرا على المجهود العظيم ونتمنى لك المزيد من التفوق

#5 osama80

osama80

    مشترك

  • الأعضــاء
  • 84 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 29 November 2006 - 02:12 PM

بارك الله فيك اخي الفاضل و اتمنى من الله ان يتم عليكم بثمرة هذا العمل و تحمل أمانة العلم

#6 wlahmad

wlahmad

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 252 مشاركة

تاريخ المشاركة 13 January 2007 - 12:10 AM

ماشاء الله عليك استاذي الفاضل
شرح كامل وبسيط وسهل
لاحرمت اجره

#7 جلال شواقفه

جلال شواقفه

    عضو مميز

  • الأعضــاء
  • 2,559 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 31 October 2007 - 07:48 PM

وفقك الله لكل ما هو خير
ارجو من يستفيد من مشاركاتي الدعاء لوالدي ولاموات المسلمين بالمغفره والرحمه......

جلال محمود شواقفه
مدير دائرة الحاسوب
بلدية المفرق الكبرى
المملكه الاردنيه الهاشميه.

#8 AHMADBROOKLYN

AHMADBROOKLYN

    عضو

  • الأعضــاء
  • 5 مشاركة

تاريخ المشاركة 25 April 2016 - 03:49 PM

مشكور اخي