العودة   منتديات عشاق السودان > منتديات الكمبيوتر والإنترنت > منتدى البرمجة
التسجيل مستضيف الصور التعليمـــات قائمة الأعضاء التقويم البحث مشاركات اليوم اجعل كافة المشاركات مقروءة

رد
 
LinkBack أدوات الموضوع طرق مشاهدة الموضوع
قديم 03-07-2004, 16:47   رقم المشاركة : 1 (permalink)
معلومات العضو
wad_altayeb
عضو مشارك
 
إحصائية العضو









wad_altayeb غير متواجد حالياً

 

إحصائية الترشيح

عدد النقاط : 10
wad_altayeb is on a distinguished road

 

 

pl\sql part 2

هذا المثال هو نفس المثال السابق ولكن هو Cursor for loop حيث تم الاستغنا عن كثير من الخطوات الموجوده في المثال السابق
-لا نحتاج الى تعريف الـ Cursor
-لا نحتاج الى فتح الـ Cursor
-لا نحتاج لى جملة الـ Fetch
- لا نحتاج لشرط الخروج من اللـ Loop .
- لا نحتاج لتعريف متغيرات
- لا نحتاج لغلق الـ Cursor
وكما هو واضح في المثال السابق يتم وضع الـ Query في جملة الـ For ويتم بعد ذلك التعامل مع السجلات

Parameter Cursor
يستخدم هذا النوع من الـ Cursor عند الحاجة للحصول على بيانات مشروطه اي عندما تريد وضع شرط في جملة الـ Select الموجوده في تعريف الـ Cursor حيث يتم فتح الـ Cursor ومن ثم تمرير قيم للمتغيرات الموجوده في الـ Cursor
كود بلغة HTML:
CODE  
Declare    
  Cursor C1(v_dept in number) is       
       select empno, ename , sal        from emp       
       where deptno=v_dept;   

 v_empno emp.empno%type;   
 v_ename emp.ename%type;   
 v_sal   emp.sal%type;
Begin     
    Open C1(10);          
    Dbms_Output.put_line ('empno ' || ' ename ' || ' salary ');     
    Loop           
            Fetch C1 into v_empno, v_ename , v_sal;          
           Exit when C1%notfound;          
           Dbms_Output.put_line (  v_empno ||  '  ' ||  v_ename || '   '  ||  v_sal );     
    End loop;
   Close C1;
End;
/
لو نظرنا للمثال سوف نلاحظ ان تعريف الـ Cursor اصبح يحتوي على Parameter اسمه v_dept وهذا الـ Parameter موجود في جملة الشرط where deptno=v_dept اي ان الـ Query سوف يعطينى سجلات قسم معين حسب قيمه المتغير V_dept فلو كانت قيمة الـ v_dept تساوي 10 فان الـ query سوف يعطينى سجلات القسم 10 وهكذا . وقيمة المتغير او الـ Parameter v_dept تعطى عند فتح الـ Cursor فلو نظرنا الى جملة Open c1(10) ; سوف نلاحظ ان قيمة المتغير v_dept هي 10 . ولو اردنا ان يعطينى الـ Cursor بيانات القسم 20 فكل ما علينها هو ان نغير قيمة المتغير V_dept الى 20 عند فتح الـ Cursor حيث تصبح جملة الفتح كالاتي Open c1(20) ; وهكذا .
ملاحظه :
يمكنك وضع اكثر من Parameter للـ Cursor من ثم استخدامهم كشروط لجملة الـ Select الموجوده في الـ Cursor
مثال


كود بلغة HTML:
CODE  
Declare    
Cursor C1(v_dept in number , s  in number) is        
select empno, ename , sal        
from emp       
where deptno=v_dept AND sal >= s;   
v_empno emp.empno%type;   
v_ename emp.ename%type;   
v_sal   emp.sal%type;
Begin     
Open C1(10,3000);          
Dbms_Output.put_line ('empno ' || ' ename ' || ' salary ');     
Loop           
Fetch C1 into v_empno, v_ename , v_sal;          
Exit when C1%notfound;          
Dbms_Output.put_line (  v_empno ||  '  ' ||  v_ename || '   '  ||  v_sal );     
End loop;
Close C1;
End;
/

هذا المثال يحوي tow parameters الاول v_dept لتمرير قيمة القسم و الثاني S لتمرير قيمة الراتب حيث نستطيع ان نرجع بيانات موظفي قسم معين الذين رواتبهم تتجاوز قيمة معينه كما هو موضح في المثال .


Cursor for update
يستخدم هذا النوع من الـ Cursor لعمل Update في جدول الـ Cursor للسجل الموجود عليه المؤشر في متغير الـ Cursor
بمعنى اخر اذا قمت بعمل Fetch لسجل معين من الـ Cursor واردت ان تعمل Update لهذا السجل في الجدول فانك تحتاج في هذه الحالة لاستخدام الـ Cursor for update
مثال
افرض انك تريد ان تعمل update للموظف الذي راتبه اقل من 100$ لاعطاءه زياده بنسبه 5%
كود بلغة HTML:
CODE  
Declare    
Cursor C1 is       
select empno, ename , sal         
from emp for update of emp.sal;    
v_empno emp.empno%type;    
v_ename emp.ename%type;    
v_sal   emp.sal%type; 
Begin      
Open C1;           
Dbms_Output.put_line ('empno ' || ' ename ' || ' salary ');      
Loop            
Fetch C1 into v_empno, v_ename , v_sal;           
if v_sal < 1000 then    
update emp set sal =v_sal + v_sal * 0.5     
where current of  c1; 
end if;     
Exit when C1%notfound;           
Dbms_Output.put_line (  v_empno ||  '  ' ||  v_ename || '   '  ||  v_sal );
End loop;
Close C1;
End;
/
لاحظ شرط للـ update الموجود في المثال where current of c1 اي عمل update في الجدول للسجل المقابل من حيث الرقم لسجل الـ cursor الذي عملنا له Fetch .
wad_altayeb

التعديل الأخير تم بواسطة : demon بتاريخ 22-02-2006 الساعة 16:41.
wad_altayeb غير متواجد حالياً   رد مع اقتباس
قديم 12-08-2004, 18:00   رقم المشاركة : 2 (permalink)
معلومات العضو
عاشق المراة
عضو مميز
 
الصورة الرمزية عاشق المراة
 

 

 
إحصائية العضو









عاشق المراة غير متواجد حالياً

 

إحصائية الترشيح

عدد النقاط : 10
عاشق المراة is on a distinguished road

 

 

تسلم وانشاء الله مانعدم مواضيعك

التوقيع




أنا ما تورطت يوماً بمدح ذكور القبيلة و لا أدين لهم بالولاء . .
ولكنني شاعر قد تفرغ خمسين عاماً لمدح النسـاء
boshi10@hotmail.com
الايميل
للبنات الحلوات]

عاشق المراة غير متواجد حالياً   رد مع اقتباس
قديم 18-02-2006, 19:19   رقم المشاركة : 3 (permalink)
معلومات العضو
lordam2000
عضو جديد
 
إحصائية العضو








lordam2000 غير متواجد حالياً

 

إحصائية الترشيح

عدد النقاط : 10
lordam2000 is on a distinguished road

 

 

شكرا عاى المعلومات ولاكن أريد شرحا كامل عن Pl\sql
lordam2000 غير متواجد حالياً   رد مع اقتباس
رد


أدوات الموضوع
طرق مشاهدة الموضوع

تعليمات المشاركة
لا تستطيع كتابة مواضيع
لا تستطيع كتابة ردود
لا تستطيع إرفاق ملفات
لا تستطيع تعديل مشاركاتك

كود [IMG] متاحة
كود HTML معطلة
Trackbacks are متاحة
Pingbacks are متاحة
Refbacks are متاحة


الساعة الآن: 17:17


Powered by vBulletin® Version 3.6.8, Copyright ©2000 - 2008, Tranz By Almuhajir
جميع الآراء والتعليقات المطروحة تمثل وجهة نظر كاتبها وليس بالضرورة وجهة نظر الموقع
SudaBest.net SudaBest.net

Search Engine Optimization by vBSEO 3.2.0 RC5

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103