بتـــــاريخ : 9/18/2008 11:53:34 PM
الفــــــــئة
  • الحـــــــــــاسب
  • التعليقات المشاهدات التقييمات
    0 1447 0


    الدرس الثاني عشر

    الناقل : mahmoud | العمر :35 | الكاتب الأصلى : أسامة البسومي | المصدر : www.arabopn.com

    كلمات مفتاحية  :
    برامج SQL PLUS

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

    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;

     

     

    كلمات مفتاحية  :
    برامج SQL PLUS

    تعليقات الزوار ()