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

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

صورة
- - - - -

Ora-01403: No Data Found


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

#1 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 18 March 2007 - 07:09 PM

عندما اقوم بتنفيذ هذا الكود :-

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
و أرجو الرد فى أسرع وقت .... وشكراً


#2 هانى سند

هانى سند

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 743 مشاركة

تاريخ المشاركة 19 March 2007 - 01:55 PM

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

أخي الكريم هاني

الخطأ بسبب عمل 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;
/
مع تمنياتي بالتوفيق

#3 hanyfreedom

hanyfreedom

    مشرف سابق وعضو مميز

  • المجموعة الماسية
  • 1,481 مشاركة
  • البـلـد: Country Flag
  • الاهتمامات:Chess , Sudoku

تاريخ المشاركة 19 March 2007 - 03:19 PM

أخى العزيز هانى ..... لقد افدتنى كثيراً .... وكلامك بالفعل صحيح ..... شكراً جزيلاً لك