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

ارسال رسالة لكل المستخدمين من الDatabase

Featured Replies

بتاريخ:

عندما اسوي compile على trigger
when-timer-expired
يعطينى خطا
scott.msg_pkg is invalid

  • الردود 59
  • المشاهدات 27.8k
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

بتاريخ:

thnnxxxxxxxxxxxxxxxxxx

  • بعد 2 أسابيع...
بتاريخ:

الله يعطيك العافيه على الشرح الجميل

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

الأخ خالد :
بارك الله فيك وشكراً على هذه المعلومة الجميلة والمفيدة

حسام مانع

بتاريخ:

جزاك الله خيرا

بتاريخ:

والله انها لشغلة رائعة وانت أروع وشكرا جزيلا على هاي المعلومات القيمة

  • بعد 2 أسابيع...
بتاريخ:

بارك الله فيك يا اخي درس رائع ننتظر منك الجديد والمفيد

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

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

  • بعد 2 أسابيع...
بتاريخ:

مشكور جدا على الموضوع الجديد والشرح الوافى
وياريت تستمر فى شرح ال packages القليلة الاستخدام والغير شائعة الانتشار لتعم الاستفادة على الجميع
شكرا

بتاريخ:

الف شكر لك اخي خالد على هذاء التميز والتعاون
جزاك الله خير

  • بعد 2 أسابيع...
بتاريخ:

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

  • بعد 4 أسابيع...
بتاريخ:

ظهرت هذه الرساله
Errors for PACKAGE BODY MSG_PKG:
PLS-00201: identifier 'DBMS_ALERT' must be declared
PL/SQL: Statement ignored
بالرغم من اننى عملت
Grant EXECUTE_CATALOG_ROLE to scott

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

ياجماعة انا برضو ما اشتغلت لي نرجو من الشباب مساعدتنا

بتاريخ:

أبشر يا أخ / خالد بالنجاح والتوفيق ( بإذن الله )
لأنك تعطي المعلومة بأمانة وصدق وحب
لك الدعاء مني في ظهر الغيب

بتاريخ:

بارك الله فيك

بتاريخ:

لكن اخي خالد ارسلت لك الى الايميل الخطا الذي يحدث ارجو الرد بسرعة

  • بعد 2 أسابيع...
بتاريخ:

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

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

والله انك امين يا اخي
لأنك تعطينا هذه المعلومات القيمه
حيث ان نقل العلم امانه
وشكرا جزيلا لك

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

مشكور يا اخ/ خالد
لكن ارجو المساعده فى فتح ملفات pdf
وجزاك الله خيراً :)

  • بعد 2 أسابيع...
بتاريخ:

الف شكر لك على الأفادة

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

مشكور يا أخي الكريم :)

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

السلام عليكم ورحمة الله وبركاتة
اعزاء احب ان اقدم لكم فكرة ارسال رسائل بين الـSessions وكيفية الاستفادة منها في التحكم في النظام من خلال الـDatabase

فائدة الرسائل بين الـsessions
افرض ان لديك Database Application مكون من عدد كبير من المستخدمين , وافرض ان لديك مشكلة ما في الداتابيس او انك تريد اغلاق قاعدة البيانات لسبب من الاسباب . وانك قبل ان تغلق قاعدة البيانات تريد ان اشعار جميع المستخدمين بانك سوف تعمل اغلاق لقاعدة البيانات بعد فترة محدده من الزمن .
هنا تحتاج ان ترسل رسالة لجميع المستخدمين لاشعارهم بذلك .
موضوعنا هو كيف تعمل على ارسال رسالة من قاعدة البيانات لجميع المستخدمين , وهذه الطريقه لها فوائد كثير ومثال على ذلك ما ذكر سابقاً

الخطوات
لكي نعمل على ارسال رسالة الى session معين يجب ان نستخدم الـPackage المسمى Dbms_alert ولكن هذا الـpackage هو تابع للمستخدم sys وحتى يتم استخدامة مع المستخدم scott والذي سوف نستخدمة لعمل مثال , يجب اعطا صلاحية للمستخدم scott لاستخدام الـpackage المسمى dbms_alert ويكون كالاتي
1- ادخل على المستخدم sys , كلمة السر هي change_on_install ان لم تكن قد عدلت
2-نفذ الامر
Grant  EXECUTE_CATALOG_ROLE to scott


3- ادخل على المستخدم scott كلمة السر هي tiger ان لم تكن قد عدلت
4- كون الـ Package التالي

create or replace package msg_pkg is
 Function Msg(P_msg varchar2) return varchar2; 
end msg_pkg;



create or replace package body msg_pkg is
 Function Msg(P_msg varchar2) return varchar2
 is
l_msg varchar2(2000);
l_state number;
 Begin
Dbms_alert.waitone(p_msg,l_msg,l_state,0);
Return l_msg;
 End;
end msg_pkg;



هذا الـpackage سوف يستخدم لاستقبال الرسائل , حيث ان الـfunction المسمى MSG سوف ترجع الرسالة الي سوف تستقبل من بقية الـsession وهذة الرسائل سوف يتم استقبالها عن طريق Dbms_alert.waitone والذي يحوي 4 parameters
p_msg هو IN parameter وهو عبارة عن اسم الرسالة
l_msg هو out parameter وهو يرجع محتوى الرسالة
l_state هو out parameter وهو يرجع 0 هو 1 اذا كانت القيمة 0 فان هناك رسالة حصلت
الـparameter الاخير هو قيمة رقمية تحدد عدد ثواني الانتظار لرسالة معينة (اذا كانت مثلاً 10 فان البرنامج عندما يصل الى هذه السطر سوف ينتظر 10 دقائق لكي يستقبل رسالة معين )

5- بعد ان يتم تكوين الـpackage بنجاح اذهب الى الـform builder ثم كون form بالموصفات التالية
في الـTrigger المسمىwhen-new-form-instance قم بكتابة الاتي

DECLARE 
timer_id Timer; 
BEGIN 
timer_id := CREATE_TIMER('emp_timer', 10000, REPEAT); 
dbms_alert.register('my_msg');
END; 


وهذا الكود يستخدم لغرضين
الاول انشاء Timer يتم من خلالة تحسس الرسائل المرسلة كل 10 ثواني
الثاني تسجيل هذا الـsession لكي يكون قادراً على استقبال الرسائل والتي سوف ترسل من Session اخر عن طريق الاجرى dbms_alert.register وكذلك يتم تحدد اسم الرسالة الي سوف يكون قادر على استقبال محتواها .
في الـTrigger المسمى WHEN-TIMER-EXPIRED اكتب الاتي

Declare
Is_msg Varchar2(2000);
Begin
Is_msg:=msg_pkg.msg('my_msg');
if is_msg is not null Then
  Message (is_msg);
  Message (is_msg);
end if;
End;


وفي هذا الكود يتم استدعا الـPackage الذي تم انشاءه سابقاً لكي نتاكد من وجود اي رسالة , وكما هو ملاحظ من الكود فانه اذا كانت هناك رسالة سوف يتم اظهارها باستخدام الـmessage

الان نفذ النموذج ولكن قبل ان تعمل على تنفيذه قم بإضافة اي item للفورم حتى ينفذ بشكل صحيح . ثم اتركا في حالة الـRUN اي لا تقم باغلاقه

6- لان اذهب الى الـsqlplus وادخل باستخدام اي مستخدم وليكن scott
7- الان نفذ الامر الاتي

exec dbms_Alert.signal('my_msg','You must close all forms now');


وهذ الامر يستخدم لوضع رسالة في الرسالة المسماة my_msg
8- الان اعمل commit حتى يتم ارسال الرسالة
9- اذهب الى النموذج والذي قمت بتنفيذه مسبقاً وسف تلاحظ ظهور الرسالة

ملاحظة
افرض انك تريد ان تغلق النموذج عن طريق ارسال رسالة من الـsqlplus , لعمل ذلك عدل الكود الى الاتي

Declare
Is_msg Varchar2(2000);
Begin
Is_msg:=msg_pkg.msg('my_msg');
if is_msg is not null Then
  If Is_msg ='EXIT' Then
	Exit_form(no_commit);
  else
	Message (is_msg);
	Message (is_msg);
  end if;
end if;
End;



الان اذهب الى الـsqlplus ثم ارسل الاتي

exec dbms_Alert.signal('my_msg','EXIT');


ثم COMMIT;

بتاريخ:

جزاك الله كل خير على هذا الموضوع الجميل. لكن ظهرت لى مشكلة :
بعد ان تم تكوين الـpackage بنجاح و اثناء انشاء الـTrigger المسمىwhen-new-form-instance
ظهرت رسالة ORA-00600:, internal error code, .... وتختفى عند ازالةdbms_alert.register

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

هل يمكن إستخدام هذا الكود الرائع مع oracle application(ERP
وهل يمكن أستخدامها بدون عمل forms

وشكرا

  • بعد 3 أسابيع...
بتاريخ:

اخي العزيز اشكرك على هذه المشاركة الرائعة بس عند تطبيقي تظهر مشكلة في الدفلوبر 6i في ال tregger
when_timer_expierd
تظهر الرسالة التالية
identifier 'MSG_PJG.MSG' must by declared
مع العلم اني عملت هذا البكج في قاعدة البيانات وحسب المذكور في المشاركة
اخي العزيز ارجو منك المساعدة لاني بحاجة ماسة لهذا الموضوع مع الشكر الجزيل

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

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

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

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

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

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.