الانتقال إلى المحتوى
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.

Execute Immedate With :old And :new Value

Featured Replies

بتاريخ:

CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FRO EACH ROW
DECLARE 
CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا
WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR';
OLD_VAL VARCHAR2(500);
NEW_VAL VARCHAR2(500);
BEGIN
IF UPDATING THEN
FOR I IN ZZZ LOOP
EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VAL;\\ الجمله الذي فيها الخطا
EXECUTE IMMEDIATE ':NEW.'||I.COLUMN_NAME INTO NEW_VAL;
IF OLD_VAL != NEW_VAL THEN
INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE)
END IF;
END LOOP;
END IF;
END;


الرجو من الاعضا الكرام ان يساعدوني في هذا التريجر
في اسرع وقت ممكن

العمل الذي افكر فيه هو
نظام مراقبة المستخدميين من ناحية التعديل والحذف من قاعدة البيانات نفسها نفرض ان لدينا جدول اسمه

CREATE TABLE DDD
( 
A VARCHAR2(20),
B VARCHAR2(20),
C VARCHAR2(20),
D VARCHAR2(20),
E VARCHAR2(20),
);



الكرسر يقوم باسترجاع A,B,C,D ثم قبل التعديل يطلع القيمه القديمه والجديده لكل واحد ثم يقارن هل القيمه الجديده تساوي القيمه الجديده اذا كان مختلف يقوم بحفظ القيم في جدول اخر
مع العلم ان هذا الجدول مثال لان الجداول عندي اقل جدول فيه
100 كلوم
فارجو من لديه اي فكره لا يبخل عليا او يعطيني ارقم وانا اتواصل معه انا في السعوديه
[email protected]

الترغر.txt

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

ارجوكم ساعدوني

بتاريخ:

EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VAL
دى المقصود بيها سيلكت ولا انسيرت انت عايزة يعمل ايه بعد اكسيكيوت اميديت
ممكن تقارن على طول الجديد بالقديم دون اكسيكيوت امديت

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

كيف اعمل مقارنه بهذي الطريقه ممكن تعطيني حل
او اعطني اي رقم للتواصل معك لاهمية الموضوع

بتاريخ:

عملتلك التريجر ده

CREATE OR REPLACE TRIGGER UPD_DEL BEFORE UPDATE ON EMPLOYEES FOR EACH ROW
DECLARE
BEGIN
IF :OLD.EMPLOYEE_ID<>:NEW.EMPLOYEE_ID THEN
INSERT INTO EMPLOYEES_DELETED VALUES (:OLD.EMPLOYEE_ID);
END IF;
END;



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

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

الظاهر انتم ما فهمتم قصدي

انا عملت كرسر يجيب لي كل الفيلد من الجدول المحدد ثم بعد كذا يمرر القيم من الكرسر الى old و new اوتوماتيك مثلا جدول emp الكرسر يجيب كل الكولم التي في جدول emp ثم يمرر رقم الموظف الى old وnew ثم يمرر اسم الموظف وهكذا حتى يخلص الكرسر

CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FRO EACH ROW
DECLARE 
CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا
WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR';
OLD_VAL VARCHAR2(500);
NEW_VAL VARCHAR2(500);
BEGIN
IF UPDATING THEN
FOR I IN ZZZ LOOP
EXECUTE IMMEDIATE ':OLD.'||I.COLUMN_NAME INTO OLD_VAL;\\ الجمله الذي فيها الخطا
EXECUTE IMMEDIATE ':NEW.'||I.COLUMN_NAME INTO NEW_VAL;
IF OLD_VAL != NEW_VAL THEN
INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE)
END IF;
END LOOP;
END IF;
END; 

بتاريخ:

CREATE TRIGGER AAAA BEFORE UPDATE OR DELETE ON XXXX FOR EACH ROW
DECLARE
CURSOR ZZZ IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COL //مثلا
WHERE TABLE_NAME ='ACOUNT' AND OWNER = 'SHR';
OLD_VAL VARCHAR2(500);
NEW_VAL VARCHAR2(500);
BEGIN
IF UPDATING THEN
FOR I IN ZZZ LOOP
OLD_VAL:= ':OLD.'||I.COLUMN_NAME ;\\ الجمله بعد التصحيح
NEW_VAL:=':NEW.'||I.COLUMN_NAME ;
IF OLD_VAL != NEW_VAL THEN
INSERT INTO HELP VALUES(OLD_VALUE,NEW_VALUE)
END IF;
END LOOP;
END IF;
END; 

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

الاخ asd202
مثلا emp_no =30
عندما نعمل الطريقه التي تكلمة عنها
i.column_name= emp_no
new_nal:=':old.'||i.column_name;

فهنا ينحفظ معك كل الجمله مثلا :old.emp_no: مش قيمة emp_no

بتاريخ:

توجد طرق كثيرة ولكنه يريد الا يكتب اسماء العواميد لانها كثيرة جدا
اقل جدول 100 عامود

DECLARE
CURSOR T IS SELECT COLUMN_NAME FROM SYS.ALL_TAB_COLUMNS
WHERE TABLE_NAME ='EMPLOYEES' AND OWNER = 'HR';
STAT VARCHAR2(5000);
BEGIN
STAT:='CREATE OR REPLACE TRIGGER AAAA BEFORE UPDATE OR DELETE ON EMPLOYEES FOR EACH ROW
DECLARE
OLD_VAL VARCHAR2(200);
NEW_VAL VARCHAR2(200);
COL_NAME VARCHAR2(200);
BEGIN
IF UPDATING OR DELETING THEN ';
FOR I IN T LOOP
   STAT:=STAT||' OLD_VAL:=:OLD.'||I.COLUMN_NAME||';';
   STAT:=STAT||' NEW_VAL:=:NEW.'||I.COLUMN_NAME||';';
    STAT:=STAT||'   IF OLD_VAL <> NEW_VAL THEN
                   INSERT INTO EMPLOYEES_DELETED VALUES(NEW_VAL,OLD_VAL);
                   END IF ;';
END LOOP;
STAT:=STAT||'END IF ; END;';
EXECUTE IMMEDIATE (STAT);
END;

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

بتاريخ:

ان شاء الله شغال تمام ولن تحتاج لكتابة اسماء العواميد

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

تحت التجريب
بس ايش هذي تريجر او فنكشن واين تكون

بتاريخ:


اخي تفضل هذه الشاشه (form) تستطيع من خلالها انشاء تريكر على كل جدول موجود في السكيما و جعل قيم التتبع تذهب الى جدول و احد هو TRACK_USER_TABLESحيث مثلا لديك 200 جدول و كل جدول يحتوي 100 حقل فليس من المعقول ان تقوم ببناء تريكر يدويا لكل جدول لذلك قمت بتصميم برنامج يبني التريكر اتوماتيكيا و يجعل كل قيم الجداول تذهب الى جدول واحد هو TRACK_USER_TABLES اي انك بعد ان تحصل على هذه الفورمه لن تضطر لكتابه اي كود و سوف تحصل على امكانيه تتبع كافه جداول السكيما الخاصه بك..
صورة البرنامج
69401465.jpg
صورة الجدول الذي تم به تخزين قيم التتبع
643325599.jpg

MODULE2.rar

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

اشكرك اخي عمار اشكر كل صراحة حل ممتاز جدا
بس بقي مشكله واحده فقط ياليت تساعدني
اريد ان يحفظ كل الصف في حقل واحد مش كل حقل في فيلد
مثلا عدلت اي شي في جدول الموظفين ينحفظ كل البيانات القديمه للصف الذي تعدل في فلد واحد الذي هو old

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

بتاريخ:

طيب اخي و كيف تفصل بين حقول هذا الصف برمز (,) مثلا؟؟؟

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

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

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

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

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

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.