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

مشكلة بسيطة في تريغر


mmsalman87

Recommended Posts

انا عندي تريغر يقوم بترحيل البيانات من جدول الموظفين الى جدول التغييرات الوظيفية ولكن ليس كلما تم تغيير على بيانات الموظف وانما عند تغيير الوظيفة او الدائرة التابع لها
وعملت كالتالي :

CREATE OR REPLACE TRIGGER update_job_history
 AFTER UPDATE OF job_id,emp_dept_id ON employees
 FOR EACH ROW
BEGIN INSERT INTO job_history (emp_id,job_id, department_id)
  VALUES(:old.emp_id,:old.job_id,:old.emp_dept_id);
END;


التريغر شغال تمام ولكن المشكلة انه يقوم بترحيل البيانات كلما عدلنا في بيانات الموظف سواء كانت الوظيفة او الدائرة او حتى الاسم
يعني بيشتغل كلما عملنا تعديل على البيانات بشكل عام وليس فقط عندما اعدل الوظيفة او الدائرة ؟؟ ما الحل ؟؟؟

رابط هذا التعليق
شارك

السلام عليكم
جرب كده

CREATE OR REPLACE TRIGGER update_job_history
AFTER UPDATE OF job_id,emp_dept_id ON employees
FOR EACH ROW
when (new.job_id<>old.job_id or new.emp_dept_id <>old.emp_dept_id )
BEGIN INSERT INTO job_history (emp_id,job_id, department_id)
VALUES(:old.emp_id,:old.job_id,:old.emp_dept_id);
END;

رابط هذا التعليق
شارك

اخي الكريم كلامك جميل ولكن انا بدي اسال سؤال :
ما فائدة Of
تحديد الحقول التي اذا حدث عليها تغيير ان يتفعل التريغر صح ؟
اذا ماذا استفدنا منها اذا كان التريغر يقوم بالترحيل على ايا حال من الاحوال يعني لو غيرت مش الادارة ومش الوظيفة يعني شي تاني مثل الاسم
رح يرحل البيانات اذا ما فائدتها ؟
تانيا التريغر لا يقبل ان يتفعل في ظل وجود محددات يعني constraint as unique or primary key
وفي هذه الحالة ماذا استفدنا ايضا ؟؟؟
النتيجة ان التريغر الحالي ناقص ينقصه حل مشكلة المحددات وحل مشكلة التغيير
بحيث اذا غير المستخدم الوظيفة او الدائرة يتفعل وغير ذلك لا يتفعل وشكرا لاهتمامك

رابط هذا التعليق
شارك

سكريبت جدول الموظفين


CREATE TABLE EMPLOYEES
(
EMP_ID NUMBER(10),
F_NAME VARCHAR2(30 BYTE),
S_NAME VARCHAR2(30 BYTE),
T_NAME VARCHAR2(30 BYTE),
L_NAME VARCHAR2(30 BYTE),
DOB DATE,
POB VARCHAR2(50 BYTE),
NATIONALITY NUMBER(3),
GENDER NUMBER(1),
CURRENT_ADDRESS VARCHAR2(100 BYTE),
CARD_ID VARCHAR2(30 BYTE),
CARD_ISSUE_DATE DATE,
CARD_PLACE VARCHAR2(30 BYTE),
PASSPORT_ID VARCHAR2(30 BYTE),
PASSPORT_ISSUE_DATE DATE,
PASSPORT_EXPIRE_DATE DATE,
PASSPORT_PLACE VARCHAR2(30 BYTE),
MARITAL_STATUS NUMBER(1),
TEL1 VARCHAR2(30 BYTE),
TEL2 VARCHAR2(30 BYTE),
MOBILE1 VARCHAR2(30 BYTE),
MOBILE2 VARCHAR2(30 BYTE),
EMAIL VARCHAR2(100 BYTE),
INTERNAL_TEL VARCHAR2(30 BYTE),
EMP_DEPT_ID NUMBER(10),
JOB_ID NUMBER(10),
MANAGER_ID NUMBER(10),
PASSWORD VARCHAR2(30 BYTE),
STATUS NUMBER,
SALARY NUMBER(8,3),
EMP_TYPE NUMBER(1)
)



سيكريبت جدول التغيرات الوظيفية

CREATE TABLE JOB_HISTORY
(
EMP_ID NUMBER(10),
START_DATE DATE,
END_DATE DATE,
JOB_ID NUMBER(10),
DEPARTMENT_ID NUMBER(10),
SALARY_EFFECT NUMBER(8,3),
TYPE_TO_CHANGE NUMBER(1)
)

رابط هذا التعليق
شارك

حقيقي انا مش عارف ايه المشكلة ... انا عملت الجداول وكمان عملت التريجر والدنيا ميه ميه ولا كأنها زبادي في الخلاط :unsure:
مش عارففين المشكلة اصلا ... جايز عشان انت عامل كونسترين
ممكن تبعت كل الاسكريبتات اللي على الجدولين دول PK ,FK واي حاجة تانية معمولة على الجدولين دول ؟؟؟

رابط هذا التعليق
شارك

فقط معمول عليهم ال constraint التالية
جدول بيانات الموظفين
emp_id primary key

جدول التغيرات الوظيفية

emp_id, job_id_dept_id primary key

اخي الكريم التريغر بدون محددات يشتغل 100/100

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية