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

Featured Replies

بتاريخ:

السؤال:

اكتب trigger  يقوم بمنع اضافة موظف على جدول الموظفين راتبه اعلى من أعلى راتب  في الموظفين.

الحل: 

 

 

create or replace trigger Do_Not_Add
before insert on emp
for each row
begin
if :new.sal > max(sal) then
raise_application_error(-20001,'لا يمكن الإضافة');
end if;
end;
/
 

 

 لا أعرف ما الخطأ أرجو منكم المساعدة وجزاكم الله خيرا

تم تعديل بواسطة Ahmad.Hasan

بتاريخ:

 

 

create or replace trigger Do_Not_Add
before insert on emp
for each row
declare
v_max number;


begin
select  max(sal)
into v_max
from emp;
if :new.sal > v_max then
raise_application_error(-20001,'لا يمكن الإضافة');
end if;
end;
 

 

تم تعديل بواسطة Ahmad.Hasan

بتاريخ:

الطريقة الصحيحة حتى تحصل على أعلى راتب هي جملة select التي كتبها الأخ elnaggar55555 لكنها أيضاً لن تعمل لأن ال trigger لا يقبل أن تكتب جملة select على نفس ال table الذي يعمل عليه ال trigger داخل ال trigger (تستطيع أن تعمل select على أي table تريد مل عدا emp). إذا جربت طريقة الأخ elnaggar55555  و لم تعمل فالحل الوحيد هو أن تنقل ال code إلى ال form

بتاريخ:

الطريقة الصحيحة حتى تحصل على أعلى راتب هي جملة select التي كتبها الأخ elnaggar55555 لكنها أيضاً لن تعمل لأن ال trigger لا يقبل أن تكتب جملة select على نفس ال table الذي يعمل عليه ال trigger داخل ال trigger (تستطيع أن تعمل select على أي table تريد مل عدا emp). إذا جربت طريقة الأخ elnaggar55555  و لم تعمل فالحل الوحيد هو أن تنقل ال code إلى ال form

 

كلام سليم ولكن يعمل الترجر باضافة بسيطة كما في الكود التالي:

 

 

 

CREATE OR REPLACE TRIGGER do_not_add
   BEFORE INSERT
   ON scott.emp
   FOR EACH ROW
DECLARE
   v_max   NUMBER;
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   SELECT MAX (sal)
     INTO v_max
     FROM scott.emp;


   COMMIT;


   IF :NEW.sal > v_max
   THEN
      raise_application_error (-20001, 'You Cant Add');
   END IF;
END;
/
 
بتاريخ:

تستطيع أن تعمل select على أي table حتى emp

 

لكن لا تستطيع ان insert or update

 

الطريقة الصحيحة حتى تحصل على أعلى راتب هي جملة select التي كتبها الأخ elnaggar55555 لكنها أيضاً لن تعمل لأن ال trigger لا يقبل أن تكتب جملة select على نفس ال table الذي يعمل عليه ال trigger داخل ال trigger (تستطيع أن تعمل select على أي table تريد مل عدا emp). إذا جربت طريقة الأخ elnaggar55555  و لم تعمل فالحل الوحيد هو أن تنقل ال code إلى ال form

بتاريخ:

الله يعطيكم العافية

بتاريخ:

 

الطريقة الصحيحة حتى تحصل على أعلى راتب هي جملة select التي كتبها الأخ elnaggar55555 لكنها أيضاً لن تعمل لأن ال trigger لا يقبل أن تكتب جملة select على نفس ال table الذي يعمل عليه ال trigger داخل ال trigger (تستطيع أن تعمل select على أي table تريد مل عدا emp). إذا جربت طريقة الأخ elnaggar55555  و لم تعمل فالحل الوحيد هو أن تنقل ال code إلى ال form

 

كلام سليم ولكن يعمل الترجر باضافة بسيطة كما في الكود التالي:

 

 

 

CREATE OR REPLACE TRIGGER do_not_add
   BEFORE INSERT
   ON scott.emp
   FOR EACH ROW
DECLARE
   v_max   NUMBER;
   PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
   SELECT MAX (sal)
     INTO v_max
     FROM scott.emp;


   COMMIT;


   IF :NEW.sal > v_max
   THEN
      raise_application_error (-20001, 'You Cant Add');
   END IF;
END;
/
 

معلومة جديدة :)

لكن لو سمحت سؤال ... ما معنى  PRAGMA AUTONOMOUS_TRANSACTION; ؟

و هل بالإمكان عمل commit داخل trigger ؟ 

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

جزاكم الله خيرا وشكر لكم جميعا

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

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

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

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

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

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.