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

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


roro2005

Recommended Posts

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

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                        ;


وتظهر رسسالة تم انتهاك القيد الفريد

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

رابط هذا التعليق
شارك

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

 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 ;



موفقة

رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

ايضا المشكلة في جملة 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 ; 

رابط هذا التعليق
شارك


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

 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 زي ما تفضلت
رابط هذا التعليق
شارك

  • بعد 2 أسابيع...

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


اولا هذه 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

رابط هذا التعليق
شارك

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

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

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

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

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

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