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

Ref Cursor

Featured Replies

بتاريخ:

إخواني الكرام ، تحية طيبة وبعد ،

في الحقيقة أنا أقوم بصناعة إجراء داخل حزمة تقوم بإستقبال قيمتين IN الأولي لتحديد الرقم الأول للموظف ، والثانية لتحديد الرقم الأخير للموظف بحيث أن أرتجع مجموعة من السجلات ما بين مجموعة من الموظفين ، وفي نفس الوقت أنشأ باراميتر آخر من نوع Out يرتجع قيم المخرجات في Ref Cursor كما يلي :

Create Or Replace Package PKG
As
 Type Ref_Emp Is Ref Cursor;
 Procedure List_Emp(ID_Start In Number,ID_End In Number,O_Emp Out Ref_Emp);
End;
/

Create Or Replace Package Body PKG
As
 Procedure List_Emp(ID_Start In Number,ID_End In Number,O_Emp Out Ref_Emp)
 Is
 Begin
  Open O_Emp For Select *
							  From Emp
							  Where Emp_ID Between ID_Start And ID_End;
 End;
End;
/



الإجراء List_Emp موجود داخل حزمة PKG ، كنت أستدعي هذا الإجراء كما يلي :

Variable O_Emp  RefCursor;
Execute PKG.List_Emp(15,20,_Emp);
Print O_Emp;



بإختصار ، كيف يمكنني الإستفادة من هذا الإجراء داخل النموذج أو التقرير كحدٍ سواء ؟؟؟

علي فكرة ، أنا حتي الآن أتعامل مع الـ DataBlock من نوع Table أو From Query ، لكنني لم أتمكن من التعامل مع الـ Procedure

شكراً وأتمني مساعدتكم

والله الموفق

بتاريخ:

ردا على اخى الفاضل .. لقد قمت مسبقا بالرد على الأخ hobaa فيما يخص موضوع مشابة على استخدام Package من خلالها نقوم بعمل table for rec و نسخدمة على فورمة .. و قام الأخ hobaa بنشرة على لسانى .. من فضلك قم بالرجوع للخلف و على ما اعتقد كان اسم الموضوع ( المكنة طلعت قماش ) لأن من الواضح ان الموضوع خد منة وقت كتير .... بالتوفيق

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

ردا على اخى الفاضل .. لقد قمت مسبقا بالرد على الأخ hobaa فيما يخص موضوع مشابة على استخدام Package من خلالها نقوم بعمل table for rec و نسخدمة على فورمة .. و قام الأخ hobaa بنشرة على لسانى .. من فضلك قم بالرجوع للخلف و على ما اعتقد كان اسم الموضوع ( المكنة طلعت قماش ) لأن من الواضح ان الموضوع خد منة وقت كتير .... بالتوفيق



هل هذا يعقل ، أستجيب لإحدي الأصدقاء بالمنتدي ثم أعود أسأل نفس السؤال !!!!

أخي الكريم ، أنا أستجبت في قسم الـ PL/SQL ولكن نحن الآن في قسم الـ Forms ، بمعني أدق أن الأمر يختف !!!

بإختصار يا أخي ، مشكلتي مع متغير الإخراج كيف يتم صناعتة داخل النموذج !!!

بمعني أدق ، أنا صنعت الـ Pakcage وبداخلة إجراء يرتجع جدول من نوع Ref Cursor وذلك داخل قاعدة البيانات DataBase !!!

من الطبيعي عند إستدعاء أي إجراء من قاعدة البيانات يتم إستخدام الكود التالي :

Declare
  N1   Number;
  N2   Number;
  CalcRes   Number;
Begin
N1 := :Text_Item1;
N2 := :Text_Item2;
Calc(N1,N2,CalcRes);
:Text_Item3 := CalcRes;
End;



حيث أن الكود السابق يستدعي إجراء عادي وهو الإجراء Calc فأنا الحمد لله أعلم كيفية إستدعائة بالكود ولكن لا أعلم كيف أربطة ربط مباشر من الـ DataBlock في الوضع الحالي !!!

لكن المشكلة في الـ Ref Cursor يجب أن أنشأ متغير من نوع RefCursor كما يلي :

Variable O_Emp   RefCursor;
Execute PKG.List_Emp(5,10,_Emp);



ولكن أخي هذا كل ما يحدث من داخل قاعدة البيانات ، ولكن كيف يتم من داخل النموذج !!!

فحينما صنعت متغير من نوع RefCursor لم يقبل !!!

إذاً ، مشكلتي الآن متعلقة بكيفية صناعة مثل هذا النوع من الـ Procedure الذي يرتجع جدول من السجلات من داخل النماذج !!!

هل هناك طريقة مباشرة مع الـ Block وما هي هذه الطريقة ؟؟؟

حيث أنني حاولت أكثر من مرة ضبط خاصية Query Data Source Type الي القيمة Procedure ولم أنجح

وكيف تتم مثل هذه العملية دون الـ Data Block بمعني بالكود ؟؟؟

إذاً ، فأنا لدي سؤالين ، الأول كيفية الربط من خلال الـ Data Block ومن خلال الكود ؟؟


ياريت أخي تكون فهمت قصدي ، ونحن هنا في قسم النماذج وأرغب بالتعامل مع الإجراءات بكل الطرق


شكراً ، وياريت أجد إستجابة سريعاً ، جزاكم الله كل خير ،

والسلام ختام

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

لا حول ولا قوة إلا بالله !!!

طب إخواني ، كل ألي أنا أعرفة عن الـ Ref Cursor المدرج داخل الـ Package يمكنني إستخدامة كما يلي من داخل النموذج :

Declare
  RC  PKG.Cur_Emp;
  ID_Code VarChar2(20);
  ID_Name VarChar2(50);
Begin
  Open RC For Select Emp_Code,Emp_Name From Emp;
  Fetch RC Into ID_Code,ID_Name;
  While RC%Found
  Loop
  Message(ID_Code || ' - ' || ID_Name);
 Fetch RC Into ID_Code,ID_Name;
  End Loop;
  Close RC;
End;



بس أخواني ما فائدة إستخدام هذا الكود ، حيث يمكنني صناعة Cursour مباشرتاً دون اللجوء الي الكيرسور الموجود بقاعدة البيانات !!!

لكنني أعلم أنها مفيدة جداً في حالة الربط مع الـ Data Block ، بإختصار ، كيف يمكنني التعامل مع النافذة المرفقة

شكراً

RC.zip

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

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

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

http://www.araboug.org/ib/index.php?showto...hl=%DE%E3%C7%D4

اسف على طول الغياب

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

أولاً أخي أنا أشكرك كثيراً

ثانياً ، أنا نظرت الي الرابط وللأسف لا أعلم كيف لم أحصل علية ( تاهت مني ) ، لكن أخي أنا من الصباح وأنا أحاول معها بأن تقرأ فقط لا غير ( لا أحتاجها تتدرج ) ولكنني لم أتوصل لحل مشكلتي !!!

الأخ الغالي ، الموضوع ماشي معاية تمام ، ولكن عند تنفيذ البرنامج Ctr+R يظهر لي أكثر من خطأ عند كل سطر PLSQL_TABLE ، وعندما فكرت أن أحذفهم فوجأت بأن الفورم يدرجهم من جديد وأعتقد أن وجودهم حتمياً في كلاً من الأحداث التالية علي الداتا بلوك !!!

QUERY-PROCEDURE
INSERT-PROCEDURE
UPDATE-PROCEDURE
DELETE-PROCEDURE
LOCK-PROCEDURE


بجد أخي أنا لا أعلم ما المشكلة ( ياريت تنظر الي المرفق ) .


شكراً وجزاك الله كل خير

Simble.zip

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

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

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

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

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

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.