بتاريخ: 5 فبراير 200719 سنة comment_90906 السلام عليكم ورحمة الله -- مثال على استخدام المصفوفه وتكوين جدول فى الذاكرة وانشاء الحقول المكونه لهذ الجدول --وكيفية الغاء سجلات منها --كيفية الطباعه من المصفوفه-- مطلوب استبعاد الموظف الذى له اكبر سنوات خبرة من مجموعه الثلاثة موظفين اصحاب اكبر رواتب فى ادارة معينه --المطلوب طباعة الثلاثه موظفين قبل الاستبعاد -- المطلوب طباعة الموظفين الاخرين (2) بعد استبعاد الموظف ذو اعلى سنوات خبرة set serverout on; declare --تعريف السجل وتحديد الحقول المكونه للسجل المؤقت ومنها حقل عدد سنوات العمل المحسوب type emp_rec is record ( eno number(4) , ename varchar2(10) , dept number(2) , salary number(7,2) , hiredate date , yearsofservice number(2) ); --تعريف جدول مكون من السجلات المعرفه فى الخطوه السابقة type emp_table is table of emp_rec; -- تعريف المصفوفه emp_col emp_table := emp_table(); -- انشاء كيرسر مبنى على حقول من جدول الموظفين -- يجب ان يكون ترتيب الحقول وعددها يكون مساوى لحقول الجدول المؤقت المعرف فى الخطوه الاولى ( 6 حقول ) ز cursor c_emp is select empno, ename , deptno , sal, hiredate , abs(round((sysdate-hiredate)/365)) yearsofservice from emp where deptno = &deptno order by sal desc; c_element integer := 0; temp_years number(2) := 0; -- تعريف فهرس المصفوفه temp_element integer; begin -- تجهيز المصفوفه لاستقبال 3 قيم emp_col.extend(3); -- تعبئة او ملء المصفوفه ببيانات الموظفين الثلاثه(أو أقل) اصحاب اكبر رواتب for vemp in c_emp loop emp_col(c_emp%rowcount) := vemp; exit when (c_emp%rowcount) = 3; exit when c_emp%notfound; end loop; --تحريك المؤشر للوقوف على اول سجل والحصول على ترتيبه c_element := emp_col.first; --عمل تكرار حسب عدد السجلات المحققه للشرط -- الاحتفاظ بترتيب صاحب اكبر سنوات خبرة for i in 1 .. emp_col.count loop if emp_col(c_element).yearsofservice > temp_years then temp_years := emp_col(c_element).yearsofservice; temp_element := c_element; end if; --طباعة بيانات الموظفين الثلاثه (او اقل)ز dbms_output.put_line('cuurent element '||c_element || ' is ' ); dbms_output.put_line('empno: ' ||emp_col(c_element).eno||' '|| 'ename: ' ||emp_col(c_element).ename||' '|| 'dept : ' ||emp_col(c_element).dept||' '|| 'salary:' ||emp_col(c_element).salary||' '|| 'hiredate:' ||emp_col(c_element).hiredate||' '|| 'years of service:'||emp_col(c_element).yearsofservice); c_element := emp_col.next(c_element); end loop; --الغاء صاحب اكبر سنوات خبرة emp_col.delete(temp_element); --تحريك المؤشر على السجل الاول فى المصفوفه c_element := emp_col.first; -- عمل تكرار لطباعة الموظفين المتبقيين بعد الغاء صاحب اكبر سنوات خبرة for i in 1 .. emp_col.count loop dbms_output.put_line('cuurent element after delete one '||c_element || ' is ' ); dbms_output.put_line('empno: ' ||emp_col(c_element).eno||' '|| 'ename: ' ||emp_col(c_element).ename||' '|| 'dept : ' ||emp_col(c_element).dept||' '|| 'salary:' ||emp_col(c_element).salary||' '|| 'hiredate:' ||emp_col(c_element).hiredate||' '|| 'years of service:'||emp_col(c_element).yearsofservice); c_element := emp_col.next(c_element); end loop; end; Enter value for deptno: 10 old 16: where deptno = &deptno new 16: where deptno = 10 cuurent element 1 is empno: 7839 ename: KING dept : 10 salary:5000 hiredate:17-NOV-81 years of service:25 cuurent element 2 is empno: 7782 ename: CLARK dept : 10 salary:2450 hiredate:09-JUN-81 years of service:26 cuurent element 3 is empno: 7934 ename: MILLER dept : 10 salary:1300 hiredate:23-JAN-82 years of service:25 cuurent element after delete one 1 is empno: 7839 ename: KING dept : 10 salary:5000 hiredate:17-NOV-81 years of service:25 cuurent element after delete one 3 is empno: 7934 ename: MILLER dept : 10 salary:1300 hiredate:23-JAN-82 years of service:25 PL/SQL procedure successfully completed. table_array.txt تم تعديل 5 فبراير 200719 سنة بواسطة Amgad تقديم بلاغ
بتاريخ: 5 فبراير 200719 سنة comment_90912 مشــــــــــــــــــــــــــــــــــــكـــ Amgad ـــــــــــــــــــــــــــــــــــورجزاك الله خير تقديم بلاغ
بتاريخ: 5 فبراير 200719 سنة comment_90948 السلام عليكم ورحمة الله وبركاتة :-مشكور ياخي على هذا العمل الرائع جزاك الله الف خير وجعله في ميزان حسناتك تقديم بلاغ
بتاريخ: 6 فبراير 200719 سنة comment_90977 شكراً جزيلاً لكم ولكن يا ريت لو تشرح لنا كيف يمكن عمل هذا الاستعلام بالطريقة العادية لكي يتم التفريق بينهماوشكراً تقديم بلاغ
بتاريخ: 6 فبراير 200719 سنة comment_90998 مشكور يا أخي كثير و جعله في ميزان حسناتك إن شاء الله تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.