بتاريخ: 18 مارس 200718 سنة comment_94239 عندما اقوم بتنفيذ هذا الكود :- 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 مارس 200718 سنة comment_94315 السلام عليكم و رحمة الله و بركاته أخي الكريم هاني الخطأ بسبب عمل 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; / مع تمنياتي بالتوفيق تقديم بلاغ
بتاريخ: 19 مارس 200718 سنة كاتب الموضوع comment_94335 أخى العزيز هانى ..... لقد افدتنى كثيراً .... وكلامك بالفعل صحيح ..... شكراً جزيلاً لك تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.