الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

بتاريخ:

السلام عليكم

اخواني . عندي مشكلة . عند تنفيذ 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

بتاريخ:
السلام عليكم

اخواني . عندي مشكلة . عند تنفيذ 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:
وشكرً

51966[/snapback]








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

SQL>SHOW ERROR;
بتاريخ:

الأخ / 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;

بتاريخ:
  • كاتب الموضوع

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

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

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

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

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

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

بتاريخ:

الأخ / asheq

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

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

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

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


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

تم تعديل بواسطة Amgad

بتاريخ:
  • كاتب الموضوع

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

تحياتي لك

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

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

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

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

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

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.