hanyfreedom بتاريخ: 18 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 18 مارس 2007 عندما اقوم بتنفيذ هذا الكود :- declare type qq is table of employees.last_name%type index by pls_integer; type ww is table of employees.department_id%type index by pls_integer; tln qq; tdid ww; cursor yyy is select last_name,department_id from employees where salary<17000 and employee_id between 100 and 114; o number:=0; begin for i in yyy loop o:=o+1; tln(o):=i.last_name; tdid(o):=i.department_id; end loop; for t in tln.first||tdid.first..tln.last||tdid.last loop dbms_output.put_line('Employee Name: ' ||tln(t)||' Department_id: '||tdid(t)); end loop; end; / لماذا يعطينى هذا الخطأ :- Employee Name: Popp Department_id: 100 Employee Name: Raphaely Department_id: 30 declare * ERROR at line 1: ORA-01403: no data found ORA-06512: at line 17 مع العلم أنى اعمل على أسكيمة ال hr بأوراكل 10g و أرجو الرد فى أسرع وقت .... وشكراً اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
هانى سند بتاريخ: 19 مارس 2007 تقديم بلاغ مشاركة بتاريخ: 19 مارس 2007 السلام عليكم و رحمة الله و بركاته أخي الكريم هاني الخطأ بسبب عمل concat للindex الخاص بالtable of last_name مع الtable of depratment_idفعمل الconcat سيبب وجود index غير موجود فعليا كما انه برغم ان عدد العناصر في الجدول 12 الا انه سيقوم بتنفيذ الloop عدد 1201 مرة بسبب الconcat فهو قد بدا من 11 الي 1212و هو خطأ بالطبع و انت عمليا لا تحتاج لعمل هذا الconcat فيمكن تنفيذ ما تريد باستخدام الidex الخاص باي من الجدولين الموجودين لديك و اليك نسخة مصححة من الكود declare type qq is table of employees.last_name%type index by binary_integer; type ww is table of employees.department_id%type index by binary_integer; tln qq; tdid ww; cursor yyy is select last_name,department_id from employees where salary<17000 and employee_id between 100 and 114; o number:=0; begin for i in yyy loop o:=o+1; tln(o):=i.last_name; tdid(o):=i.department_id; end loop; for t in tln.first..tln.last loop dbms_output.put_line('Employee Name: ' ||tln(t)||' Department_id: '||tdid(t)); end loop; end; / و الطريقة الأفضل و الأصح هي استخدام نفس الloop الاول الخاص بالcursor في العرض بدون الحاجة الي الloop الثاني خاصة عند وجود الكثير من البيانات و اليك التعديل declare type qq is table of employees.last_name%type index by binary_integer; type ww is table of employees.department_id%type index by binary_integer; tln qq; tdid ww; cursor yyy is select last_name,department_id from employees where salary<17000 and employee_id between 100 and 114; o number:=0; begin for i in yyy loop o:=o+1; tln(o):=i.last_name; tdid(o):=i.department_id; dbms_output.put_line('Employee Name: ' ||tln(o)||' Department_id: '||tdid(o)); end loop; end; / مع تمنياتي بالتوفيق اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
hanyfreedom بتاريخ: 19 مارس 2007 كاتب الموضوع تقديم بلاغ مشاركة بتاريخ: 19 مارس 2007 أخى العزيز هانى ..... لقد افدتنى كثيراً .... وكلامك بالفعل صحيح ..... شكراً جزيلاً لك اقتباس رابط هذا التعليق شارك المزيد من خيارات المشاركة
Recommended Posts
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.