إنتقال للمحتوى

  • تسجيل الدخول عبر الفيس بوك تسجيل الدخول عبر تويتر Log In with LinkedIn Log In with Google      تسجيل دخول    
  • إنشاء حساب

صورة
- - - - -

انشاء مصفوفه -array - للتعامل مع بيانات جدول


5 رد (ردود) على هذا الموضوع

#1 Amgad

Amgad

    مشرف عام ومشرف قسم تحليل النظم

  • الفريق الإداري
  • 4,559 مشاركة
  • الاسم الأول:امجد
  • اسم العائلة:حلمي
  • البـلـد: Country Flag
  • المنصب الحالي:Business Systems Analyst at al Fanar Co. Riyadh KSA

تاريخ المشاركة 05 February 2007 - 04:10 AM

السلام عليكم ورحمة الله

-- مثال على استخدام المصفوفه وتكوين جدول فى الذاكرة وانشاء الحقول المكونه لهذ الجدول
--وكيفية الغاء سجلات منها
--كيفية الطباعه من المصفوفه

-- مطلوب استبعاد الموظف الذى له اكبر سنوات خبرة من مجموعه الثلاثة موظفين اصحاب اكبر رواتب فى ادارة معينه
--المطلوب طباعة الثلاثه موظفين قبل الاستبعاد
-- المطلوب طباعة الموظفين الاخرين (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   1.98كيلو   199 عدد مرات التحميل

تم التعديل بواسطة Amgad, 05 February 2007 - 04:14 AM.

لا إله إلا الله الحليم الكريم
لا اله إلا الله العلى العظيم
لا اله إلا الله رب السماوات السبع و رب العرش العظيم
‏اللهم ارزقني قبل الموت توبة وعند الموت شهادة وبعد الموت جنة
اللهم ارزقني حسن الخاتمة
اللهم هون علينا سكرات الموت ... ونور علينا قبورنا
اللهم ارزقني الموت وأنا ساجد لك يا ارحم الراحمين
اللهم ثبتني عند سؤال الملكين
اللهم اجعل قبري روضة من رياض الجنة ولا تجعله حفرة من حفر النار
اللهم اني اعوذ بك من فتن الدنيا
اللهم ارحم ابائنا وامهاتنا واغفر لهما وتجاوز عن سيئاتهما وادخلهم فسيح جناتك ... والحقنا بهما يا رب العالمين
اللهم ارحم موتانا وموتى المسلمين واشفي مرضانا ومرضى المسلمين
اللهم اغفر للمسلمين والمسلمات والمؤمنين والمؤمنات الأحياء منهم والأموات
وبارك اللهم على سيدنا محمد صلى الله عليه وسلم
اللهم آمين ... اللهم آمين ... اللهم آمين


....


#2 sky information

sky information

    عضو نشط

  • الأعضــاء
  • 337 مشاركة

تاريخ المشاركة 05 February 2007 - 11:51 AM

مشــــــــــــــــــــــــــــــــــــكـــ Amgad ـــــــــــــــــــــــــــــــــــور

جزاك الله خير

#3 محمد علي الحيلان

محمد علي الحيلان

    مشترك

  • الأعضــاء
  • 82 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 05 February 2007 - 07:54 PM

السلام عليكم ورحمة الله وبركاتة :-
مشكور ياخي على هذا العمل الرائع
جزاك الله الف خير وجعله في ميزان حسناتك
لااله الا الله محمد رسول الله

#4 omar-alreyati

omar-alreyati

    عضو مميز

  • الأعضــاء
  • 596 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 06 February 2007 - 09:54 AM

شكراً جزيلاً لكم

ولكن يا ريت لو تشرح لنا كيف يمكن عمل هذا الاستعلام بالطريقة العادية لكي يتم التفريق بينهما

وشكراً

بالله عليكم لا تنسوني من دعاءكم الصالح
لا تنسوا أهل غزة والعراق والمجاهدين من دعاءكم

#5 eno_vec

eno_vec

    عضو

  • الأعضــاء
  • 26 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 06 February 2007 - 02:50 PM

مشكور يا أخي كثير و جعله في ميزان حسناتك إن شاء الله
[COLOR=green]youssef[B][FONT=Times][SIZE=1]

#6 orahamdi

orahamdi

    مشترك

  • الأعضــاء
  • 132 مشاركة
  • الاسم الأول:Hamdy
  • اسم العائلة:Fleafel
  • البـلـد: Country Flag

تاريخ المشاركة 26 May 2009 - 06:35 PM

الف شكر لك اخ امجد وعلى مشاركاتك الرا ئعه