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

استفسار فى ال Tree Item

Featured Replies

بتاريخ:

يوجد بعض الاشياء التى لم اعرف سببها عند عمل استعلام شجرى على TreeItem فى الفورم كالتالى :-


DECLARE
htree ITEM;
v_ignore NUMBER;
rg_emps RECORDGROUP;
BEGIN htree := Find_Item('block1.tr');
rg_emps := Create_Group_From_Query('rg_emps',
'select 1,level ,ename,null,empno
from emp start with mgr is null
connect by prior empno = mgr
');
v_ignore := Populate_Group(rg_emps);
Ftree.Set_Tree_Property(htree, Ftree.RECORD_GROUP, rg_emps);
END;




السؤال هنا لماذا وضعنا رقم واحد وكلمة level وكلمة null فى الاستعلام اريد ان اعرف السبب ولماذا؟؟؟ اتمنى تكونوا فهمتوا سؤالى يا اخوة.

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

مفيش رد يا اخوة؟؟؟؟؟ :D

بتاريخ:

لأ في رد من أحد الإخوه :D

بالنسبه لرقم واحد فهو يستخدم لتحديد حالة الnodes داخل الشجره. فإذا كتبت (1) فانك عندما تشغل الفورم ستجد أن كل ال nodes مفتوحين (expanded nodes) أما إذا كتبت (1-) ستجد أن كل ال nodes مقفولين (collapsed nodes) ، ولو كتبت (0) سوف تلغي الnodes أساساً (leaf nodes) .

بالنسبه لكلمة null وهي لتحديد حالة الأيكونه الخاصه بكل node فيمكنك مثلاً إستبدالها بهذا التعبير 'delrec' وستجد أن كل node أخذت شكل أيكونة حذف سجل.

أهم نقطه. بالنسبه لكلمة level وهي لتحديد مستوى التدرج داخل الشجره لكل واحد. وهو يبدأ من أعلى واحد (مثلاً المدير العام) ويتدرج بطريقه هرميه
وإذا تم إستخدام كلمة level فإنه لابد من أنك ترفق جملة connect by داخل جملة الإستعلام، لأنها هي المسئوله عن تحديد ال logic الذي سوف يبنى عليه ال level لكل واحد في الشجره. فتخيل معي الوضع الإتي لفهم جملة connect by . لو أخذنا جدول employees كمثال سنجد أن أعلى مدير هو King هذا لأنه ليس هناك مديرين أعلى منه. وهو أيضاً موظف وبذلك سيأخذ level رقم (1). ثم نأتي للموظف Kochhar سنجد أنه في الترتيب الهرمي هو الثاني لأن المدير المباشر له هو King وبذلك يأخذ level رقم (2). وكما وضحت أن الذي حدد ظهور ال level بهذا الشكل هي جملة ال connect by.

وماذا تعني بالظبط جملة ال connect by؟ . لو أخذنا جملة ال connect by كالآتي:

connect by manager_id= prior employee_id

كأنها تقول لل oracle server الآتي: لكل سجل من السجلات أنظر لكل موظف (employee_id) ثم إبحث عن رقم ال level للمدير المباشر له . وبعد ذلك إجعل ال level لكل موظف كالآتي (ال level للموظف=ال level لمديره المباشر +1).

لذلك لا يمكن إستخدام ال level بدون جملة ال connect by. وال level هو pseudocolumn مثل ال sysdate ولا يمكن إستخدامه في ال .order by clause

وللعلم يستخدم ال level لتحديد ترتيب ال nodes داخل الشجره. فمثلاً ال level رقم واحد يبين أن ال node ستكون أول واحده في الترتيب. ويأتي بعدها ال nodes حسب ترتيبهم من خلال ال level.

وخد جملة الإستعلام هذه لتفيدك في الفهم الأعمق لجملة ال tree. أنا كتبتها ليتم تنفيذها من خلال ال sqlplus وليس من خلال الفورمز هذا لأن جملة الشجره تختلف في الفورمز عن الSQL-Plus

أكتب هذا قبل كتابة الجمله:

set linesize 1000
column last_name format a10



وجملة الإستعلام هي كالآتي:


select a.department_id,a.manager_id,(select last_name from employees where employee_id=a.manager_id) "Manager name",lpad('^',(level),'^')||a.last_name last_name,level,a.salary
from employees a
start with manager_id is null
connect by prior employee_id= manager_id
order by manager_id



يمكنك التغيير في الجمله لتعمق فهمك للشجره.

وأي توضيح أرسله.

بتاريخ:

الأخ / أحمد يحيى

شكرا لك على اسلوب وطريقة الشرح

بالفعل .. شرح متميز ... من ... عضو متميز ...

واشكرك ايضا على تواجدك المستمر ... والرد السريع على الاخوه الاعضاء

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

بتاريخ:

الأخ/ أمجد

ولك بمثل ما دعوت لي إن شاء الله. وأشكرك على تعقيبك المتميز لي. وأنا بتمنى الإستفاده الدائمه لي ولباقي أعضاء هذا المنتدى المحترم.

هذا المنتدى أفادني لذلك لابد من رد الجميل. ويكفي أن يكون لهذا المنتدى مشرفين متفاعلين بمعنى الكلمه..............

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

بارك الله فيك اخى احمد يحى

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

ولكن اخى احمد يحى الاحظ لابد من اختيار عمود ال empno مباشرة بعد كلمة null فى المثال الاول الذى ارفقته اعلى و واذا تم حذف العمود empno يحدث خطا و فانا لا اعرف لماذا ذلك؟؟؟
انا متاسف جدا انى بتعبك
بارك الله فيك

بتاريخ:

ولا أسف ولا حاجه خد راحتك. طبيعي جداً أنه لو تم حذف عمود ال empno لا تكون الجمله صحيحه. لا تنسى أنه يتم إستخدام هذا العمود في جملة ال connect by فإذا حذفتها إزاي هاتشتغل ال connect by ؟!

لو أنك نظرت إلى ناتج الشجره ستجد أن ناتج الشجره هو أسماء الموظفين وليس أرقامهم. وتم وضع عمود ال empno فقط ليستخدم في جملة ال connect by والتي يعتمد عليها عمود ال level والذي هو الأساس في تكوين الشجره. كذلك فإن الناتج هو أسماء الموظفين ولكن الفورم يستخدم أرقام الموظفين أثناء ال RUNTIME حتى تتم عمل الشجره. ولابد من وضع هذا العمود بعد ال node_icon أو بمعنى أصح بعد كلمة null في مثالك ذلك لأن الفورمز سوف تتجاهله في الناتج. أما إذا وضعته في مكان آخر فالأمر سوف يختلف وبذلك لا تتم الشجره كما ينبغي لمثالك.

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

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

بتاريخ:

thanks alot

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

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

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

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

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

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.