بتاريخ: 28 مايو 20178 سنة comment_287085 السلام عليكم وكل عام وانتم بخير احاول كتابة (trigger) التالي: غير أني اريد المساعدة في معرفة كيف يمكن فحص العملية (insert/update/delete) لاختار منها رقم المدرب trigger: CREATE OR REPLACE TRIGGER TRG_HIGH_QUALIFICATION AFTER INSERT OR DELETE OR UPDATE ON BSC_INSTRCTR_QUALIFICATIONS BEGIN UPDATE bsc_instructors SET qualification = ( SELECT QUALIFICATION FROM BSC_INSTRCTR_QUALIFICATIONS WHERE QUALIFICATIONYEAR = ( SELECT MAX(QUALIFICATIONYEAR) FROM BSC_INSTRCTR_QUALIFICATIONS Where INSTRUCTOR_NO = ) ) END; جدول المدربين : CREATE TABLE BSC_INSTRUCTORS ( NOA NUMBER NOT NULL , NOM VARCHAR2(20 BYTE) UNIQUE , FULLNMAE VARCHAR2(100 BYTE) NOT NULL , DOB DATE , GENDER NVARCHAR2(5) NOT NULL , QUALIFICATION NUMBER NOT NULL , COUNTRY NUMBER , HAVE_TOT NVARCHAR2(3) , TRAININGFIELDS NVARCHAR2(2000) , TEL NVARCHAR2(100) , EMAIL NVARCHAR2(150) , TWITTER NVARCHAR2(100) , FACEBOOK NVARCHAR2(100) , LINKEDIN NVARCHAR2(100) , GOOGLEPLUS NVARCHAR2(100) , NOTE NVARCHAR2(2000) , DELETED NUMBER DEFAULT 0 , CONSTRAINT TBLINSTRUCTORS_PK PRIMARY KEY ( NOA ) ENABLE ,CONSTRAINT FK_Instuctr_Country FOREIGN KEY ( Country ) REFERENCES BSC_Country ( NOA ) ENABLE ,CONSTRAINT FK_Instuctr_Quali FOREIGN KEY ( QUALIFICATION ) REFERENCES BSC_QUALIFICATIONS ( NOA ) ENABLE ); جدول مؤهلات المدربين: CREATE TABLE BSC_INSTRCTR_QUALIFICATIONS ( NOA NUMBER NOT NULL , QUALIFICATION NUMBER NOT NULL , QUALIFICATIONDSCRPT NVARCHAR2(200) , SPECIALIZATION NUMBER NOT NULL , QUALIFICATIONYEAR DATE , COUNTRY NUMBER , QUALIFICATIONDEGREE NUMBER , QUALIFICATIONPRIVIDER NVARCHAR2(100) , INSTRUCTOR_NO NUMBER NOT NULL , DELETED NUMBER DEFAULT 0 , CONSTRAINT TR_INSTRUCTOR_QUALIFICATIO_PK PRIMARY KEY ( NOA ) ENABLE ,CONSTRAINT FK_INSTRCTR_Qualif FOREIGN KEY ( QUALIFICATION ) REFERENCES BSC_QUALIFICATIONS ( NOA ) ENABLE ,CONSTRAINT FK_INSTRCTR_Specializ FOREIGN KEY ( SPECIALIZATION ) REFERENCES BSC_SPECIALIZATIONS ( NOA ) ENABLE ,CONSTRAINT FK_INSTRCTR_QUALIF_INSTRCTR FOREIGN KEY ( INSTRUCTOR_NO ) REFERENCES BSC_INSTRUCTORS ( NOA ) ENABLE ); تقديم بلاغ
بتاريخ: 28 مايو 20178 سنة comment_287087 السلام عليكم وكل عام وانتم بخير اريد المساعدة في معرفة كيف يمكن فحص العملية (insert/update/delete) لاختار منها رقم المدرب مش فاهم تقصد ايه؟ يمكن تقصد if inserting then ..... elsif updating then .... تقديم بلاغ
بتاريخ: 28 مايو 20178 سنة كاتب الموضوع comment_287090 السلام عليكم وكل عام وانتم بخير اريد المساعدة في معرفة كيف يمكن فحص العملية (insert/update/delete) لاختار منها رقم المدرب مش فاهم تقصد ايه؟ يمكن تقصد if inserting then ..... elsif updating then .... هو بالظبط المطلوب يا باشمهندس بس لو تزيد معاي شوي استطيع اسناد قيمة حقل في متغير في (sql server) كالتالي: Declare @X bigint IF Exists(Select 1 from Inserted) (Select @X = Doctor_No from inserted) فكيف يمكنني كتابة كود مشابه له في الاوراكل مع وضع احتمال العمليات الثلاثة (insert/update/delete) جزاك الله خيراً تقديم بلاغ
بتاريخ: 28 مايو 20178 سنة comment_287097 برده مش فاهمك. بس شكلك تقصد ازاى تعرف القيمة الجديدة وتعينها لمتغير. انت محتاج تقرأ عن التريجرز الاول. :new.column_name بتجيب القيمة الى هيحصلها Insert. وبتعين القيمة لمتغير كالتالى:- x := :new.column_name; تقديم بلاغ
بتاريخ: 31 مايو 20178 سنة comment_287164 السلام عليكم ورحمة الله وبركاته بالنسبة للكود الخاص بال Trigger المكتوب في اول البوست -غير مسموح بإجراء select على Table بتعمل عليه DML في نفس ال Trigger -الـ Table اسمه BSC_INSTRCTR_QUALIFICATIONS لأن في الوقت ده بيكون Mutating CREATE OR REPLACE TRIGGER TRG_HIGH_QUALIFICATION AFTER INSERT OR DELETE OR UPDATE ON BSC_INSTRCTR_QUALIFICATIONS DECLARE V_NUMBER NUMBER(10) := 0; BEGIN IF UPDATING OR DELETING THEN ... ... V_NUMBER := 1; ELSE ... ... V_NUMBER := :NEW.ID; END; تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.