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

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

صورة
- - - - -

اين الخطأ في هذا الكود؟ تظهر رسالة تم انتهاك القيد الفريد


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

#1 roro2005

roro2005

    مشترك

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

تاريخ المشاركة 14 November 2010 - 12:59 PM

السلام عليكم جميعا اعضاء ومشرفي النتدى
ورحمة الله وبركاته
اين الخطا في هذا الكود
 declare                               	
 dept_id dept.deptno%type;                  
 dept_name dept.dname%type:='Computer'; 	
 dept_loc dept.loc%type:='Baghdad';     	
 begin                                      
 select max(deptno) into dept_id from dept  
 where deptno=dept_id;                      
 for i in 40..90 loop                   	
 insert into dept                       	
 values(nvl(dept_id+i,0),dept_name,dept_loc);
 end loop;
                             	
 end                        ;
وتظهر رسسالة تم انتهاك القيد الفريد

اين الخطأ
ولكم مني جزيل الشكر
اختكم

#2 ramadan1100

ramadan1100

    مشترك

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

تاريخ المشاركة 14 November 2010 - 01:12 PM

أعتقد الخطأ هنا
values(nvl(dept_id+i,0),dept_name,dept_loc);

الكود الصحيح

values(nvl(dept_id,0)+i,dept_name,dept_loc);

تقبل تحياتي
غريب في دنيا الأحزان

#3 mustafagamiel

mustafagamiel

    مشرف قسم النماذج والمشاريع

  • فريق الإشراف
  • 2,095 مشاركة
  • البـلـد: Country Flag

تاريخ المشاركة 14 November 2010 - 02:08 PM

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

select max(deptno) into dept_id from dept 
where deptno=dept_id;
شرط ال where ليس له معنى تماما
فلو تم ازالة الشرط سيكون الكود صحيح

لو تم تكملة الكود بعد ازالة شرط سينتج ايضا error سببه ان القيم المدخلة لرقم القسم أكبر من حجمها في ال structure الجدول الي هي 2

declare 
dept_id dept.deptno%type; 
dept_name dept.dname%type:='Computer'; 
dept_loc dept.loc%type:='Baghdad'; 
begin 
select max(deptno) into dept_id from dept ;
--where deptno=dept_id; 
message(dept_id);
for i in 1..40 loop 
insert into dept 
values(nvl(dept_id+i,0),dept_name,dept_loc);
end loop;
commit;
end ;


موفقة

اللهم إن كان رزقي في الســــــــــماء فأنزله
وإن كان في الأرض فأخرجـه
وإن كان بعيدا فقربه وإن كان قريبا فيسره
وإن كان قليلا فكثره وإن كان كثيرا فبارك لي فيه

اللـــهم آمين
لا إله إلا الله وحده لاشريك له- له الملك وله الحمد وهو على كل شيء قدير
لا إله إلا أنت سبحانك-- إني كنت من الظالمين






#4 amjad ghanim

amjad ghanim

    عضو

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

تاريخ المشاركة 25 November 2010 - 02:37 PM

ايضا المشكلة في جملة select انها قد ترجع اكثر من قيمة .
لذا يجب ان تتضع شروط في جملة select حتى ترجع قيمة وحده

الحل الافضل

هو ان تجعل جملة select ضمن cursor كالمثال التالي
declare
dept_id dept.deptno%type;  
dept_name dept.dname%type:='Computer';  
dept_loc dept.loc%type:='Baghdad';  
  
cursor c1 is select max(deptno) into dept_id from dept ;
  
c1_rec c1%rowtype;
begin
message(dept_id); 
for i in 1..40 loop  
insert into dept  
values(nvl(dept_id+i,0),dept_name,dept_loc); 
end loop; 
commit; 
end ;


#5 Sireen

Sireen

    عضو

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

تاريخ المشاركة 25 November 2010 - 03:54 PM

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

select max(deptno) into dept_id from dept 
where deptno=dept_id;
شرط ال where ليس له معنى تماما
فلو تم ازالة الشرط سيكون الكود صحيح

لو تم تكملة الكود بعد ازالة شرط سينتج ايضا error سببه ان القيم المدخلة لرقم القسم أكبر من حجمها في ال structure الجدول الي هي 2

declare 
dept_id dept.deptno%type; 
dept_name dept.dname%type:='Computer'; 
dept_loc dept.loc%type:='Baghdad'; 
begin 
select max(deptno) into dept_id from dept ;
--where deptno=dept_id; 
message(dept_id);
for i in 1..40 loop 
insert into dept 
values(nvl(dept_id+i,0),dept_name,dept_loc);
end loop;
commit;
end ;


موفقة



ال where معموله comment
ممكن يكون في مشكله ب structure زي ما تفضلت
Ya Bab

#6 miash80

miash80

    عضو مميز

  • الأعضــاء
  • 794 مشاركة
  • الاسم الأول:mousa
  • اسم العائلة:hamdallah
  • البـلـد: Country Flag
  • الاهتمامات:Read
  • المنصب الحالي:Analyst Assistant

تاريخ المشاركة 08 December 2010 - 04:14 PM

الحل كما قال الاستاذ الفاضل مصطفى


اولا هذه deptno=dept_id; ليس له معنى ولن ينفذ ابدا

ثانيا for i in 40..90 loop الحقل deptno في الجدول معرف 2 وعند تنفيذ الــــ loop سيعترض لانه نهاية الــloop 90

واذا جمعنا 90 + 40 اخر قيمة للرقم القسم تكون النتيجة 130 يعني ثلاث خانات واحنا معرفين هذا الحقل خانتين فقط

لذلك عدل قيمة نهاية لتكون مع مجموع اخر قيمة لهذا الحقل تساوي 99 يعني خانتين

الكود الصحيح للــــ loop هو for i in 40..59 loop

اللهم أغفر للمسلمين والمسلمات والمؤمينين والمؤمينات ألاحياء منهم وألاموات الى يوم الدين


موضوع قرأتة فأعجبني
http://www.shbab1.com/2minutes.htm

اذا عجبك موضوع من مواضيعي..لا تقل لي شكراً
و لكن أدعو لي (في ظهر الغيب) بالآتي

اللهم اغفر له ما تقدم من ذنبه و ما تأخر..اللهم احسن خاتمته
اللهم اغفر لوالديه و ارحمهما و ادخلهما جناتك برحمتك يا أرحم الراحمين و لكم بالمثل ان شاء الله
ارجو من الله ان يكون ما انقله لكم من ضمن حسناتى
 356663087.jpg

 

لا تأســــفنَّ عـلى غــــــدرِ الزمــانِ لطالــمـا

رقصـــــــت على جثــــثِ الأســــــــودِ كلابا

لا تحسبن برقصـــــها تعلوا على أســــيادها
تبقى الأســــودُ أسوداً والكـــــلابُ كِــــــلابا