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

ما هو الcursor

Featured Replies

بتاريخ:

السلام عليكم و رحمة الله و بركاته
اخواني ارجو توضيح حول ماهية الكورسر و كيفية عمله و يا ريت بعض الامثلة
و رحم الله والديكم دنيا و اخرة

بتاريخ:

الكيرسور يستفاد منه بعمل لووب على البانات وتنفيذ عمليات على السجلات او الاستفادة من قيم الها ولا يمكن حصر فوائده بهذه العجالة
من أبسطها هذا المثال
begin
for rec in(select distict deptno
from emp) loop
if rec.deptno=10 then
update emp set sal=sal + 100
where deptno=rec.deptno;
end loop;commit;
end;

بتاريخ:

تصحيح للسابق
begin
for rec in(select distict deptno
from emp) loop
if rec.deptno=10 then
update emp set sal:=sal + 100
where deptno=rec.deptno;
elsif rec.deptno=20 then
update emp set sal:=sal + 200
where deptno=rec.deptno;
end if;
end loop;
commit;

بتاريخ:

السلام عليكم
ابسط شرح للكيرسور ؛ هو انه جملة سليكت متطورة فبه تسطيع اختيار اى عامود من اى جدول وعرضه ؛ والسؤال ما دام جملة السليكت العادية تقوم بمنادة العواميد وايضا الكيرسور يقوم بنفس الاداء فما الفرق ؟
الفرق انه فى الفورم يمكن استدعاء الكيرسور فى اكثر من مكان و بالتالي لا تحتاج الى كتابتها اكثر من مرة - اى جملة السليكت - ايضا الفرق الجوهرى ان الكيرسور اقوى فى التعامل مع استدعاء البيانات خاصة فى حالة البيانات المجدولة وهى التى تعود بأكثر من صف كما ذكر الاخ الفاضل فى احد الردود السابقة وهى عند عمل loop فلا يمكن استخدام جملة سليكت ترجع بأكثر من صف الا من خلال الكيرسور ؛ ايضا يمكن تطوير الكيرسور الى الريف كيرسور ref cursor وهو استخدام اكثر من جملة سليكت على اكثر من جدول بأكثر من شرط وهو من الانواع المتقدمة قليلا على المبتدئين .
ارجوا ان تكون الصورة قد وضحت ولو بالقليل .
والله الموفق
وشكرا
ميجا

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

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

ملاحظة
الكيرسور يتم انشائه عند التعامل مع البيانات سواء بلغة ال SQL او لغة PL/SQL
اما فى ال SQL يتم عمل كيرسور ضمنى من جانب ال engin وهو المنظم لاظهار السجلات دون تدخل المطور ,اما فى ال PL/SQL لابد من انشائه لتتعامل مع ال active set لانك تحدد مكان معين لاخراج البيانات من ال active set وفى الغالب تكون المتغيرات التى تكون هى قالب البيانات الاتية من ال active set

ان شاء الله تكون الامور اتضحت امامك واتمنى الاخوة الى ميعرفش حاجة ياريت ميعطيش معلومات غلط او مبهمة.
تحياتى

بتاريخ:

شكرا لكم على الايضاح

لى سؤال اخر ... فيما يتعلق بحجم البيانات والتعامل مع جداول تحتوى سجلات كثيرة خمسمائة الف سجل او مليون سجل
السؤال : هل يتم تحميل البيانات من قاعدة البيانات الى الذاكرة مرة واحدة أو يتم تقسيمها على مجموعات ثم تحميلها فى الbuffer area وافراغها ثم تحميل مجموعة اخرى ...
وهل توجد امكانية لاجراء هذا التقسيم أو التحكم فى عدد السجلات المسترجعه فى الدفعة الواحدة ام يتم التحميل للبيانات دفعة واحدة فى الذاكرة ... وخاصة عند وجود اكثر من كيرسور يتعامل مع جداول كبيرة


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

نفس السؤال ايضا عند التعامل مع الشاشات المصممه بشكل سجلات تكرارية tabulare >> كيف يتم تحميل البيانات

طبعا هذا السؤال له اهمية عند التعامل مع بيئة ال web application

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

بتاريخ:

أنا رأيي في هذه الحالة يتم عرض سجل سجل لو كنت تتعامل مع جدول تعريفي ( Declare ) . أما إذا كان هذا الجدول له ربط خارجي ويحتوي علي سجلات كبيبة ففي هذه الحالة لا يجوز إستخدام الـ Cursor بل يتم عرض سجل بيانات الحقل الخارجي الحالي للجدول !!!!

بمعني ، نفرض أننا لدينا جدول يدعي Customer أي الزبائن أو الأشخاص ، هذا الجدول يحتوي علي 500،000 سجل كعلي سبيل المثال ، في حالة الرغبة في إنشاء نموذج خاص ( تعريفي ) له من المفضل عرض سجل سجل لهذا الجدول.

أما في حالة إرتباطة مع جداول أخري مثل جدول Invoice الخاصة بالفواتير فمن الطبيعي أنك ستعرض في نافذة تعريف الفاتورة إسم ( المورد / العميل ) ، ففي هذه الحالة لا يجوز إستخدام آداة الـ List Item حتي لا تضطر لإستخدام Cursor علي جدول Customer لجلب كافة العملاء أو الموردين . بل أفضل الحلول هو جلب رقم الـ Customer الذي يمثل الـ PK بحيث أن يتم إرتجاع سجل واحد ثم تعرض البيانات علي Display Item !!!


أما موضوع التقارير فيختلف عن النماذج ، فحسب القيمة الشرطية المدخلة لجملة الإستعلام وذلك بواسطة المستخدم ، علي سبيل المثال ، أنت ترغب في بناء تقرير يحتوي علي كافة العملاء والموردين بحيث أن يجب إدخال شرط من قبل المستخدم ، ففي حالة إدخال هذا الشرط في هذه الحالة سيتم عرض التقرير سريعاً حسب عدد السجلات المرتجعة . أما في حالة رغبة المستخدم من عرض كافة بيانات التقرير فهذا يختلف في عملية السرعة ، حيث يرتجع كافة السجلات بالجدول .


شكراً أخي الكريم وأتمني لك التوفيق

بتاريخ:

السلام عليكم
عند تنفيذ الكيرسور يقوم باسترجاع كل البيانات وحفظها فى منطقى تسمى ACTIVE SET وهي المرحلة التى قبل FETCH وعند عرض البيانات يقوم نقلها من ACTIVE SET الى المستخدم دفعة واحدة .
اما عن استرجاع عدد معين من السجلات فهذا يعتمد على جملة الشرط الموجود فى جملة السليكت
وشكرا
ميجا

بتاريخ:

الاخ / MMA شكرا لك
الاخ / خالد شكرا لك

شكرا على سرعة الاستجابه وعلى المعلومات المفيدة ...

من المعروف ان سرعة نقل البيانات فى بيئة الويب ابليكيشين web application تختلف عن سرعة نقل البيانات فى
بيئة الخادم والعميل client / server windows application

لذلك هناك توصيات او خصائص كانت فى اصدار ديفيلوبر 6 لم تعد موجودة فى ديفيلوبر 10 جي ... وذلك حفاظا على عنصر السرعة فى التعامل مع البيانات ...

لكن السؤال الاخر ... بعد ان يتم تحميل كافة السجلات (50000 سجل ) فى ال active set ... من خلال برنامج يستخدمه احد المستخدمين للتعديل فى الراتب الاساسي (علاوه مثلا لجميع العاملين ) على سبيل المثال ... وكان هناك مستخدم اخر يقوم بالتعديل على الراتب للموظف الذى يتعامل معه المستخدم الاول ...
فاي راتب الذى سيعدل به بيانات الموظف المحدد ؟؟

للحقيقه كنت اعتقد ان حجم البيانات الكبير من السجلات تنتتقل على شكل مجموعات ( حزم ) من خلال مفهوم ال swap حفاظا على سرعة نقل البيانات

شكرا ... مرة اخرى

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

بتاريخ:

بسم الله الرحمن الرحيم.
تكملة مهمة للكلام عن ال cursor و هى :-
1- ال select statement تعتبر implicit cursor أى عند تنفيذها يتم وضعها فى cursor تقوم الأوراكل بعمله ضمنيا و تحجز له مساحة من ذاكرة الجهاز لتسترجع فيه البيانات المطلوبة و تتولى أيضا عملية فتحه open و استرجاع البيانات فيه fetch و إغلاقه close أما إذا قمت بعمله أنت فتكون أنت المسئول عن جميع العمليات السابقة مما يعطيك حرية أكبر فى التعامل مع كل جزئية من تلك العمليات
2- ال cursor يعفيك من عمل ال Exception فى حالة رجوع أكثر من سجل أو عدم رجوع سجلات على الإطلاق.
و بالنسبة لسؤالك الأخر و الذى كان :
السؤال الاخر ... بعد ان يتم تحميل كافة السجلات (50000 سجل ) فى ال active set ... من خلال برنامج يستخدمه احد المستخدمين للتعديل فى الراتب الاساسي (علاوه مثلا لجميع العاملين ) على سبيل المثال ... وكان هناك مستخدم اخر يقوم بالتعديل على الراتب للموظف الذى يتعامل معه المستخدم الاول ...
فاي راتب الذى سيعدل به بيانات الموظف المحدد ؟؟

فإنه سيتم التعديل على كل session و صاحب أخر commit هو الذى سيتم تفعيل تعديله.
إذا أردت تفادى هذا يمكنك إستخدام قيد SELECT ................ FOR UPDATE و الذى يقوم بحجز السجلات التى قمت باسترجاعها لل session التى تم الاسترجاع منها فقط و بالتالى لن يتم حدوث تعديلات على هذه السجلات الا من خلال تلك ال session حتى إغلاقها أو إغلاق ال cursor المسئول عن استرجاع البيانات.
السلام عليكم و رحمة الله و بركاته.

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

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

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

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

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

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.