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

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

صورة
- - - - -

خطأ عند كتابة trigger لـ audit .. ارجو المساعدة


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

#1 asheq

asheq

    عضو

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

تاريخ المشاركة 19 November 2005 - 01:04 AM

السلام عليكم

اخواني . عندي مشكلة . عند تنفيذ trigger في SQL*Plus يظهر لي الخطأ التالي

Warning: Trigger created with compilation errors.

وتعبت وانا اعدل في الكود . حتى اني غيرت طريقة الكتابة اكثر من مرة

هذا هو التريقر


Create or replace trigger audit_emp_values

After insert or delete or update on temployee

FOR EACH ROW
Declare
BEGIN

if inserting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'i');

elsif updating then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'u');

elsif deleting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'d');
end if;

end;
/





جدول المراقبة هو

create table audit_emp_table(
user_name varchar2(30),
timestamp date,
id number(15),
old_last_name varchar2(30),
new_last_name varchar2(30),
old_first_name varchar2(30),
new_first_name varchar2(30),
old_salary number(6),
new_salary number(6),
type varchar2(10));


اتمنى احصل حل للمشكلة :unsure:
وشكرً

تم التعديل بواسطة asheq, 19 November 2005 - 01:08 AM.


#2 m_dba

m_dba

    عضو نشط

  • الأعضــاء
  • 238 مشاركة
  • الاسم الأول:Ahmad
  • اسم العائلة:Zaki
  • البـلـد: Country Flag

تاريخ المشاركة 19 November 2005 - 05:14 PM

السلام عليكم

اخواني . عندي مشكلة . عند تنفيذ trigger في SQL*Plus  يظهر لي الخطأ التالي

Warning: Trigger created with compilation errors.

وتعبت وانا اعدل في الكود . حتى اني غيرت طريقة الكتابة اكثر من مرة

هذا هو التريقر


Create or replace trigger audit_emp_values

After insert or delete or update on temployee

FOR EACH ROW
Declare
BEGIN

if inserting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'i');

elsif updating then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'u');

elsif deleting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMP_id,:OLD.EMP_LNAME,:NEW.EMP_LNAME,
:OLD.EMP_FNAME,:NEW.EMP_FNAME,      
:OLD.SALARY,:NEW.SALARY,'d');
end if;

end;
/





جدول المراقبة هو

create table audit_emp_table(
user_name varchar2(30),
timestamp date,
id number(15),
old_last_name varchar2(30),
new_last_name varchar2(30),
old_first_name varchar2(30),
new_first_name varchar2(30),
old_salary number(6),
new_salary number(6),
type varchar2(10));


اتمنى احصل حل للمشكلة :unsure:
وشكرً

عرض المشاركة






انا حالا ما منزل الاوراكل عندي عشان اجرب الكود تاعك بس في شي لفت انتباهي انو انتي ما معرف ولا متغير في DECLARE لذلك اذا ما بتلزمك شيلها وحاول مرة اخرى واذا ما زبط معك اكتب الامر التالي لاظهار ما هو الخطأ واين يقع الخطأ

SQL>SHOW ERROR;
امسح ذنوبك في دقيقتين - بس دقيقتين وشوف

http://www.shbab1.com/2minutes.htm

#3 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,558 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 20 November 2005 - 02:49 AM

الأخ / asheq

يلاحظ مع امر الاضافة انه لا توجد بيانات من جدول الold
ومع امر الالغاء لا توجد بيانات من جدول الnew

اليك الامرالذى كتبته بعد اجراء تعديلات عليه .. وتطبيقا على جدول ال emp فى scott

Create or replace trigger audit_emp_values
After insert or delete or update on emp
FOR EACH ROW
Declare
BEGIN
if inserting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:new.empno,' ',:NEW.eNAME,' ',' ',0,:new.SAL,'i');
elsif updating then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMPno,:OLD.ENAME,:NEW.ENAME,' ', ' ',:OLD.SAL,:NEW.SAL,'u');
elsif deleting then
insert into audit_emp_table
VALUES(USER,SYSDATE,:OLD.EMPno,:OLD.ENAME,' ' ,' ',' ',:OLD.SAL,0,'d');
end if;
end;

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#4 asheq

asheq

    عضو

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

تاريخ المشاركة 20 November 2005 - 10:22 PM

الله يعطيك الف عافية Amgad .. وجازك الله الف خير

ولاكن عندي استفسار

انت كتبت بعض الجمل كـ هذه
USER,SYSDATE,:new.empno,' ',:NEW.eNAME,' ',' ',0,:new.SAL,'i'

ماذا تقصد بـ ' ' يعني هل اخليها فاضية ؟

يعني مثلاً في عملية deleting . لا توجد لدينا قيم جديده . فـ هل معنى هذا اني اخلي حقول NEW فاضية ؟ عن طريق ' ' ؟ او اكتب null او ماذا ؟

وتحياتي لك يا كبير

#5 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,558 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 21 November 2005 - 01:52 AM

الأخ / asheq

عندما بدأت فى كتابة اوامر الInsert التزمت بمواصفات جدول audit_emp_table
والذى اعددته انت فى مثالك .. وبالتالى ظهرت بعض الحقول لا اهمية لها عند تعاملى مع جدول الemp
فكان لابد ان اضيف مسافات أو null للحقول التى ليس لدى بيانات لكى اضيفها لهذا السجل ...

لايفضل ان تكون الحقول الغير مستخدمه = null ... اجعلها = 'مسافه'

عموما بشكل عام يمكنك تعديل جدول audit_emp_table كما تريد .. مع ملاحظه صغيرة وهى

مع امر الاضافة لا توجد بيانات من جدول الold
ومع امر الالغاء لا توجد بيانات من جدول الnew


مع تمنياتي بالتوفيق

تم التعديل بواسطة Amgad, 21 November 2005 - 01:57 AM.

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#6 asheq

asheq

    عضو

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

تاريخ المشاركة 21 November 2005 - 02:24 PM

وياك يا رب
والله يجزاك الجنه قول آمين
والله يكثر من امثالك

تحياتي لك