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

متى استخدم التريجر وكيف احدد ما اريد

Featured Replies

بتاريخ:

السلام عليكم
اثناء تصفحي فى احد المنتديات الخاصة بالاوراكل وجدت موضوع هام لاى مبتدء ؛ الموضوع يختص بأنواع التريجرات ومعنى اسمائها وكيفية استخدما ليس هذا فحسب بل ومتى استخدم التريجر ؛ ووجدت انه من الضرورى طرح الموضوع عليكم لاهميته للمبتدئين واأوجه النظر ان الموضوع منقول وليس من ذاتى واليكم الموضوع بمشاركته :
وظيفة ال Trigger : اظهار الساعة في الفورم

مستوى ال Trigger : الفورم

نوعه : when _new form_instance

DECLARE
T TIMER ;
BEGIN
T:=CREATE _TIMER ('TI',1000,REPEAT);
END;

ولازم يكون TRIGGER ثاني ينهي الاول وهو :
مستوى TRIGGER : الفورم
نوعه : WHEN_TIMER_EXPIRED
:CLOCK :=TO_CHAR(SYSDATE,'HH:MI:SS');

حيث CLOCK : اسم DISPLAY ITEM
.......................
وظيفة ال TRIGGER : اذا كان الموشر اخر سجل سوف يرجع الى اول سجل
مستوى الTRIGGER : على مستوى BLOCK
نوعه : KEY-DOWN

IF :SYSTEM.LAST-RECORD =’TRUE’ THEN
FIRST-RECORD;
ELSE
NEXT_RECORD;
END IF;
........................................
وظيفة التريغر : تخزين وقت الخروج من الفورم داخل جدول قاعدة بيانات

مستوى التريغر : الفورم

نوعه أو إسمه : PRE-LOGOUT


Update follow_up_table
SET logout_from_system = SYSDATE
WHERE user_name = :GLOBAL.curr_user_name;

حيث :
Follow_up_table : هو جدول لمتابعة المستخدمين
Logout_from_system, user_name : حقلان في الجدول
:GLOBAL.curr_user_name اسم المستخدم الحالي


هذا التريغر ينطلق قبل تنفيذ البرنامج الفرعي logout . عندما يحتاج المستخدم أن يخرج من البرنامج . سواء كان هناك زر للخروج أو من خلال النقر على X التي على الزاوية اليمنى للشاشة . و هنا فائدته أكثر أعني الخروج عن طريق النقر على X


و الله ولي التوفيق
....................................
هذا التريجر يقوم بعمل الرقم التلقائي autonumber fore primary key

الكود التالي منقول و يتكون من 4 خطوات:
1- انشاء اي جدول جديد وليكن التالي:

CODE

CREATE TABLE departments (
ID NUMBER(10) NOT NULL,
DESCRIPTION VARCHAR2(50) NOT NULL);

ALTER TABLE departments ADD (
CONSTRAINT dept_pk PRIMARY KEY (ID));



ومن ثم ننشئ سيكونس كالتالي:

CODE
CREATE SEQUENCE dept_seq;

ومن ثم نقوم بكتابة التريجر ال1ي سيعمل قبيل ادخال اي قيمة جديدة كالتالي:


CODE
CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
SELECT dept_seq.NEXTVAL
INTO :new.id
FROM dual;
END;


واخيرا ندخل قيمة في العمود الذي لايحوي البرايمري كي:


CODE
INSERT INTO departments (description)
VALUES ('Development');


...............................
السلام عليكم
كل عام وانتم بخير
عيد مبارك على مشرفي واعضاء المنتدى وجميع الامة الاسلامية
شكرا
monadi وORACLE/MASTER،رهف
وجميع المشاركين

Dynami list

وهي تحديث للقائمة وذلك مجرد ما ينضاف اي حاجة في الجدول يتم التحديث في اللقائمة

وظيفة التريغر :تحديث القائمة في الفورم
نوع التريغر :when_new_form_instance
مستوى التريغر :form

declare
rg recordgroup;
n number;
begin
rg:=create_group_from_query('g1','select dname ,to_char(deptno) from dept');
n:=populate_group('g1');
populate_lsit('deptno,rg);
end ;
.....................................
السلام عليكم

اسم التريغر : تشغيل التقرير من داخل الفورم عن طريق ازرار

نوعه : when_button_pressed

مستواه : على الزر

declare
pl_id number;
begin
run_product(reports,'emp.rep',synchronous,runtime,filesystem,pl_id,null);
end;

حيث
emp =report name

والله الموفق
............................
وظيفة التريغر : وضع وصف لفورين كي foreign key بعد الاستعلام

اسم التريغير : post-query

المستوى : block


لنفترض عندنا داتا بلوك اسمه customers يحتوي على اسم الزبون و معلومات خاصة عنه ورقم المدينة التي يقطن بها (city_number) foreign key

و يوجد هناك جدول (master table) خاص بأرقام المدن و أسمائها ، cities_table (city_no, city_name)

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

أولا : ننشئ display item داخل بلوك الزباين و نسميه c_name و ندخل على خصائصه و نعمل database item = No

ثم نكتب التريغر post-query




DECLARE
CURSOR c1 IS SELECT city_name FROM cities_table WHERE city_no = :customers.city_number
BEGIN
OPEN c1;
FETCH c1 INTO :customers.c_name;
IF c1%NOTFOUND THEN
:customers.c_name := 'not available' ;
END IF;
CLOSE c1;
END;

ملاحظات
1) جدول الزباين يكون به فقط رقم المدينة و لا يكون به اسم المدينة
2) عند اضافة زبون لا يتم عرض اسم المدينة من خلال هذا التريغر ، و لكن يجب استخدام طريقة أخرى مثل list of value أو when-validate-item trigger
3) نستطيع استخدام نفس الكود في تريغر when_validate_item على مستوى : :customers.city_number و ذلك لعرض اسم المدينة عند اضافة زبون أو عند تغيير رقم المدينة لزبون موجود أصلا
4) نستطيع الاستغناء عن post-query & when-validate-item باستخدام تريغر واحد فقط يقوم بعمل التريغرين السابقين في نفس الوقت و هو :
post-change ، و لكن جماعة أوراكل لا ينصحون باستخدامه حيث أنه موجود لغاية الان لغرض التوافق مع برامج أوراكل القديمة، حيث يوجد عليه قيود.


و شكرا

000000000000
يعطيك العافية اخ maen

وممكن هناك طريقة مبسطة اخرى

SELECT city_name into :c_name from cities_table WHERE city_no = :customers.city_number;




والله الموفق
..............................................
السلام عليكم

سوف اكتب تريغر عن شاشة فواتير وبها جزء رئيسي وتفصيلي وهنا عند بيع كمية من صنف معين في الفاتورة سوف يطرح تلقائيا من جدول الاصناف


الجدول التفصيلي للفواتير =inv_d
الجدول للاصناف =items
على سبيل المثال

وظيفة التريغر =طرح الكمية المباعة من جدول الاصناف تلقائيا
نوعه = pre_insert
مستواه= data block


declare
a number ;
begin
select items.qty into a from item where items.item_no=:inv_d.item_no;
if :inv_d.qty>a then
message('الكمية في المخزن لاتكفي ');
raise form_trigger_failure;
else
update items set qty=qty-:inv_d.qty where item_no=:inv_d.item_no ;
end if;
end;

والله الموفق
................................
بسم الله الرحمن الرحيم
أقدم لكم في هذا الرد درس PASING PARAMETER BETWEEN FORMS
نريد أن نعمل شاشة للجدول DEPT بحيث أنه أذا عرضنا البيانات اللتي بالدائرة رقم 20 ونقرنا على زر ينتقل بنا إلى شاشة
EMPوبها أسماء لموظفين اللذين يعملون في هذه الدائرة


ننشئ شاشة للــDEPT ومن ثم نضع بها زر ومن ثم نظغط على F3ونذهب ألى PARAMETERSونعمل له أنشاء
ثم نغير أسم الباراميتر ألى NO ثم نغير PARAMETER DATA TYPE ألىNUMBER
لأن الباراميتر هنا هو الحقل DEPTNO وكما هو معروف فأن هذا الحقل نوعه رقم .نغلق الشاشة نحفظها بأسم DEPT

ثم ننشئ شاشة EMP ونعملها TABULAR بعد أن عملناها نحفظها بأسم EMP ..


نعود ألى الشاشة لأولى ثم نذهب ألى الزر ونختار الحدث WHEN_BUTTON_PREESED ونكتب الكود التالي
DECLARE
A PARAMLIST;
BEGIN
A:=CREATE_PARAMETER_LIST('THA');
ADD_PARAMETER(A,'NO',TEXT_ITEM,PARAMETER,:DEPTNO);
RUN_PRODUCT(FORMS,'EMP',ASYNCHRONOUS,RUNTIME,FILESYSTEM,A,'');
EXIT_FORM;
END;


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

ونعود إلى الشاشة الأخرى ونذهب ألى TRIGEER على مستوى الفورم زنختار الحدث التالي WHEN_NEW_FORM_INSTANCE
ونكتب الكود التالي :

DECLARE
B BLOCK;
BEGIN
B:=FIND_BLOCK('EMP');
IF(:PARAMETER.NO IS NOT NULL)THEN
SET_BLOCK_PROPERTY(B,DEFAULT_WHERE,'DEPTNO='||:PARAMETER.NO);
GO_BLOCK('EMP');
EXECUTE_QUERY;
END IF;
END;

أيضا هذا الكود مشروح في الكومبايل الخاص بالPL/SQL

.......................................
لعمل TEXT_ITEM لأربع خانات
بعد عمل التكست
كلك بالزر الايمن ثم تختارSMART TRIGGER
ثم تختار الحدث POST-TEXT-ITEM
بعد ذلك تكتب هذا الكود
IF LENGTH(:A)>4 THEN
MESSAGE('الرسالة التي تريدها أن تظهر');

END IF;
GO_ITEM('A');



بالنسبة للـــ المنيو الموجود بالأعلى
تستطيع أن تخفيه بدون حدث وذلك كاتالي
تذهب إلى MODULE
ثم تنقر عليه لتفتح لك الخصائص ثم تذهب إلى خاصية
MENU MODEL
وتزيل الملاحظة التي بجانبها ثم شغل الشاشة ستلاحظ أن المنيو قد أختفت
.....................................
تلك هى الدروس التى كانت معروضة وهى منقولة كما ذكرت من قبل ولا يسعنى القول سوى جزى الله كل المسلمين كل خير
وشكرا
ميجا

بتاريخ:

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

بتاريخ:

شكــــــرا لك يااخـــــــــــــي على المعلومات التي تفيد الكثير

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

اخى sky information جعلك الله سماء عليا فى دنيا العلم ونستهل من مطر فكرك كيفما نشاء
وشكرا
ميجا

بتاريخ:

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

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

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

  • بعد 1 شهر...
بتاريخ:

انا والله عاجز عن الشكر لهذا الموضوع القيم
حقيقه هذه هى المواضيع المفيده المفروض
تناقش فى المنتديات لان الدروس موجوده فى
الكتب
اكرر لك شكرى

بتاريخ:

شكرا و جزاك الله خيرا :) khaledmega

  • بعد 2 شهور...
بتاريخ:
  • كاتب الموضوع

السلام عليكم
شكرا لتقديرك اخى الكريم hanospace ؛ وجزاك الله خيرا اخى الفاضل gamal
وشكرا
ميجا

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

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

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

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

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

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.