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

بتاريخ:

السلام عليكم ورحمة الله وبركاتة
اعزاء احب ان اقدم لكم فكرة ارسال رسائل بين الـ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;

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

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

بتاريخ:

دائماً مميز ..
وفقك الله لما يحبه ويرضاه ..

بتاريخ:

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

بتاريخ:

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

بتاريخ:

شكرا جزيلا لك........

بتاريخ:

كعادتك تسكت دهرا وتنطق ذهبا ، اوكما قال الشاعر ههه ، تحياتي

بتاريخ:

مجهود رائع جدا اخ خالد والى الامام ,,, :unsure:

بتاريخ:

يعطيييك ألف عافيه ....

بتاريخ:

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

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

دائماً مميز ..
وفقك الله لما يحبه ويرضاه ..
:unsure: :D

بتاريخ:

يعطيك الف عافيه أخي خالد ..... إلى الأمام يامبدع : )


أخوك عادل

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

ياه شكراً خالد.


ده موضوع جامد أوي وفتح في دماغي أفكار حلوة أوي


شكراً.

:ph34r:

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

جزاك الله خير وزاد الشباب من أمثالك

بتاريخ:

مشكور يا اخي
امجد ياسين

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

كلام جامد

بس ممكن يا أخ تامر توضح لينا الافكار إلي اتفتحت عندك

بتاريخ:

Warning: Package Body created with compilation errors.
plz help me , to run this program

بتاريخ:

أكرر السؤال

ممكن يا أخ تامر توضح لينا الافكار إلي اتفتحت عندك

وشكرا

بتاريخ:

من فرج عن مؤمن كربة فرج الله عنة كربة من كرب يوم القيامة...........مشكور

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

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

شكراً

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

شكرا شكرا
وطيب الله كل اوقاتك
اخوك عدنان

بتاريخ:

مشكور اخى خالد على الشرح الوافى الجميل اشكرك كثيرا
وقد نفذت الخطوات التى طرحتها بحذافيرها ولكن واجهتنى مشكلة عند تنفيذ ال package body فىsql*plus
للمستخدم scott
وهى Dbms_alert must be declared
مع اننى قد عملت grant لل execute_catalog_role من خلال المستخدم sys
فما هى اذا المشكلة اخى خالد ارجو منك مشكورا الرد على سؤالى وشكرا****
//////محمد السعيد //////

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

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

بتاريخ:

بـــــــــارك الله فيك وبامثالك.

اخوك عبدالله الأحمدي

بتاريخ:

جزاك الله خير الجزاء
درس مفيد جدا

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

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

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

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

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

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.