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

سؤال في DB TRIGGER

Featured Replies

بتاريخ:

الأخوة الأعضاء أريد بعد عمل INSERT لجدول معين يقوم بنفس الوقت بعمل INSERT لجدول آخر
والعكس كذلك ارجو المشاركة في هذا الموضوع لأنه ذو اهمية :lol:

بتاريخ:

TABLE NAME : DEPT
FIELDS : DEPT_NO,DEPT_NAME

CREATE OR REPLACE TRIGGER INSERT_TRIGGER
AFTER INSERT
ON SCOTT.DEPT
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO SCOTT.DEPT_TEMP(:NEW.DEPT_NO,:NEW.DEPT_NAME);
END IF;
END;
/

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

جزاك الله اخي على مشاركتك الفعالة ولكن السؤال يبقى في اني اريد عمل insert لجدول dept كذلك اذا قمت بعمل insert لجدول DEPT_TEMP الذي افترضته(مثلا)
انا عرف انك باتقوللي انه اعمل نفس الشي بالنسبة للجدول DEPT_TEMP وهو
CREATE OR REPLACE TRIGGER INSERT2_TRIGGER
AFTER INSERT
ON SCOTT.DEPT_TEMP
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO SCOTT.DEPT(:NEW.DEPT_NO,:NEW.DEPT_NAME);
END IF;
END;
/
ولكن قد عملت ذلك ولكن يطلع erorr يفيد بأنه لايمكن ذلك
لأنك لو لاحظت معاي بأنه لو قمنا بعمل insert للجدول الأول سوف يقوم بعمل insert للجدول الآخر
وبعد ان يقوم بذلك كانه يريد عمل insert مرة اخري للجدول الأول وهو موجود اصلا فيدخل في loop(هنا مربط الفرس) كيف نحل عقدته؟؟؟؟؟؟؟

بتاريخ:

السلام عليكم ورحمة الله وبركاته
الاخ الكريم
بالنسبة الى الاصضافة وبنفس الوقت تريد ان تضيف بجدول اخر
اذا كان تنفيذ هذه الاضافة عن طريق الفورم يمكنك استخدام تريجر اسمه post-insert
هذا التريجر يقوم بتنفيذ امر معين بعد عمل inset
لذلك عنما تقوم بعمل insert
قم بانشاء procedure في program units
وضع جملة ال insert ولا تنسى ال commit_forms;

استدعي جملة insert في التريجر post-insert
ارجو ان تكون الفكرة وضحت

بتاريخ:

اخي الكريم
اللي فهمته منك ان عندك جدولين
واذا اضفت على اي واحد منهم تبي تضيف على الجول الثاني
اذا كان هذا المطلوب
فتحتاج تنشئ تريجر على الجدولين مثل ماتفضلوا الخوان
لكن تحتاج تشييك بسيط فقط قبل الاضافة اذا القيمة موجودة ولا لا


AFTER INSERT
ON SCOTT.DEPT_TEMP
FOR EACH ROW
BEGIN
select count(*)
into v_i
from scott.dept
where dept_no=:new.dept_no;

if v_i =0 then-- the record is not exist insert it
INSERT INTO SCOTT.DEPT(:NEW.DEPT_NO,:NEW.DEPT_NAME);
END;
end if;

اذا جربت هالطريقة ومامشت او انا مافهمت المطلوب علمني

وشكرا

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

شكرا اخي ora_seas لقد عملت ما قلته ولكن يحدث هنا erorr وهو (ora-06512,ora-04088)
مع العلم اني لو أوقفت احد الترايجر يشتغل تمام فما السبب في ذلك بارك الله في الجميع

بتاريخ:

اخي الكريم
جربت الطريقة وفعلا طلعت خطأ

وماتقدر تسويها على مستوى التيبل(على حد علمي)
لكن تقدر تسوي فيو من كل جدول
وتحط التريجر على مستوى الفيو

لنفرض عندك هالجدولين
dept
dept_copy

اول خطوة انشئ فيو من كل جدول
create dept_v as select * from dept;

create view dept_copy_v as select * from dept_copy;

ثاني خطوة انشئ تريجر على مستوى الفيو من نوع
INSTEAD OF

على الطريقة التالية

CREATE OR REPLACE TRIGGER TRIG_002 INSTEAD OF INSERT ON DEPTV REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
declare
v_no number;
BEGIN
insert into dept values(:new.deptno,:new.dept_name);
select count(*)
into v_no
from dept_copy_v
where deptno=:new.deptno;
if v_no=0 then
insert into dept_copy values(:new.deptno,:new.dept_name);
end if;

END;

وننشئ التريجر على الفيو الثانية

CREATE OR REPLACE TRIGGER TRIG_002 INSTEAD OF INSERT ON HR.DEPT_COPY_V REFERENCING NEW AS NEW OLD AS OLD FOR EACH ROW
declare
v_no number;
BEGIN
insert into dept_copy values(:new.deptno,:new.dept_name);
select count(*)
into v_no
from dept_v
where deptno=:new.deptno;
if v_no=0 then
insert into dept values(:new.deptno,:new.dept_name);
end if;

END;

والحين اذا اضفت على اي واحدة من الفيو راح تضيف في الجدولين معا

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


اتمنى اني افدتك
وبانتظار ردك

شكرا لك

بتاريخ:

فعلا طريقة الفيووو التي ذكرها الأخ رائعة

شكرا جزيلا لك

بتاريخ:

العفو اخوي aza

ماشاالله على الصورة اللي تحت اسمك
لياقتها عالية ماتتعب من النط :lol: :lol: :lol:

تحياتي لك

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

اشكرك اخي ORA_SEAS على مشاركتك القيمة هكذا روح التعاون والفكر
واكرر شكري لك وكل من ساهم في هذا المنتدى الرائع والله يوفق الجميع

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

اشكرك اخي ORA_SEAS على مشاركتك القيمة هكذا روح التعاون والفكر
واكرر شكري لك وكل من ساهم في هذا المنتدى الرائع والله يوفق الجميع

بتاريخ:

العفو اخي masmas

وبدوري اقدم الشكر لكل اعضاء المنتدى على مشاركاتهم الرئعة والمفيدة وحبهم للخير وإفادة الآخرين

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

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

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

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

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

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.