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

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

صورة
- - - - -

سؤال بخصوص Trigger


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

#1 RTL

RTL

    عضو

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

تاريخ المشاركة 02 May 2010 - 01:03 AM

مرحبا
السلام عليكم
هل يمكننا ان نكتب تريجر يجمع بين امرين؟
مثلا لدي جدولان يوجد باحدها forign key من الجدول الاخر
واريد مثلا منع حذف اي صف من الجدول الاساسي وكذلك منع اي تعديل على احد attributeالخاصه فيه لنفرض مثلا name ..
هل يمكن جمع هذان الشرطان مع بعض؟؟
ام احتاج لعمل 2trigger احدهما يمنع الحذف والاخر يمنع تعديل الاسم؟؟

#2 mageed_ahmed

mageed_ahmed

    مشرف قسم الـ DBA

  • فريق الإشراف
  • 956 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:.

تاريخ المشاركة 02 May 2010 - 11:11 AM

سؤالك رائع والاجابة يمكن لكن سأترك لك مساحة التفكير في كيفية عمل ذلك بنفسك لكنه مؤكد يمكن ولك أن تعلم في عالم البرمجة

Your Limitation is your imagination

أتركك مع مثال لذلك وبالتوفيق

SQL>
SQL>
SQL>
SQL> CREATE TABLE myTable1 (a INTEGER, b CHAR(10));

Table created.

SQL>
SQL> CREATE TABLE myTable2 (c CHAR(10), d INTEGER);

Table created.

SQL>
SQL>
SQL> CREATE TRIGGER trig1
  2      AFTER INSERT ON myTable1
  3      REFERENCING NEW AS newRow
  4      FOR EACH ROW
  5      WHEN (newRow.a <= 10)
  6      BEGIN
  7          INSERT INTO myTable2 VALUES(:newRow.b, :newRow.a);
  8      END trig1;
  9  

Trigger created.

SQL>
SQL> insert into myTable1 values(1,'a');

1 row created.

SQL> insert into myTable1 values(2,'b');

1 row created.

SQL>
SQL> select * from myTable1;

         A B
---------- ----------
         1 a
         2 b

SQL> select * from myTable2;

C                   D
---------- ----------
a                   1
b                   2

SQL>
SQL> drop table myTable1;

Table dropped.

SQL> drop table myTable2;

Table dropped.

SQL>

           
         

("واتقوا يوما ترجعون فيه الي اللــــــه")

#3 RTL

RTL

    عضو

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

تاريخ المشاركة 02 May 2010 - 06:31 PM

:) شكرا جزيلا استاذي الفاضل سررت كثيرا بأن هناك من رد على سؤالي
بالنسبة للكود الذي وضعته فهمته قمت بتعبئه بيانات الجدول الثاني بعد تعبئة الجدول الاول باستخدام نفس القيم

لكني لم استطع تفسير سؤالي بناء على مااوضحت لي
فمثلا لو قمت بعمل

CREATE OR REPLACE TRIGGER trg_deltest
   BEFORE DELETE
   ON test
   FOR EACH ROW
   WHEN (OLD.name = 1)
BEGIN
   raise_application_error (-20100, 'You can not delete ');
END;
/


هنا استطيع منع اي حذف يتم بناء على الشرط
لكن عملية الجمع بين منع الابديت على متغير محدد مثل النيم ومنع حذف اي صف من نفس الجدول لم اتوصل لها الى الان

مثلا على افتراض انه قام المستحدم بمحاولة حذف اي صف بناء على متغير اخر غير name
!!!!!!!!!!!!!!

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

اتمنى ان تتحمل اسئلتي التي قد ترى انها تافهه بعض الشيء او صعوبة استيعابي لاني مبتدئه في هذا الامر
ولك جزيل الشكر

#4 RTL

RTL

    عضو

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

تاريخ المشاركة 03 May 2010 - 02:14 PM

شكرا لك
تم حل المشكلة ولله الحمد

شكرا مرة اخرى

#5 leader_a2000

leader_a2000

    مشترك

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

تاريخ المشاركة 03 May 2010 - 04:27 PM

ما الحل الذي وجدته اخي