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

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

Featured Replies

بتاريخ:

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

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

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

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

بتاريخ:

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

جزاك الله خير

بتاريخ:

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

بتاريخ:

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

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

وشكراً

بتاريخ:

مشكور يا أخي كثير و جعله في ميزان حسناتك إن شاء الله

  • بعد 2 سنة...
بتاريخ:

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

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

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

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

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

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

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.