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

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

صورة
- - - - -

اين الخطأ !!


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

#1 ليلاس

ليلاس

    عضو

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

تاريخ المشاركة 09 May 2005 - 11:51 AM

السلام عليكمممممم
عندي فورم ماستر ديتيل للكلية وتخصصاتها
بحيث ندخل رقم الكلية بالماستر وتلقائيا ينتج لدينا رقم التخصص حسب المعادلة التالية
رقم التخصص= (رقم الكلية *10)+1
هذه المعادلة لإيجاد رقم التخصص للمرة الاولى
يعني مثلا الكلية رقم 12 تكون ارقام تخصصاتها
121
122
123
اما اذا كان لدينا تخصصات واردنا اضافة تخصص آخر يكون بإيجاد اكبر رقم تخصص وإضافة عليه القيمة 1
يعني لو كانت التخصصات الموجودة هي 121و122و123 ,واردنا ادخال تخصص رابع
سوف نأخذ اعلى قيمة وهي (123) ونجمع ليها 1
123+1= 124,,, رقم التخصص الرابع
هاهو الكود والموجود في
WHEN_NEW_RECORD_INSTANCE
في بلوك الديتيلز


declare

tmp1 varchar2(5);


begin if :sp.spid is null then --- for empty record only

select max(to_number(spid)) into tmp1 from sp where sp.colid = :collage.colid;

if tmp1 is null then
tmp1 := to_char(to_number(:collage.colid)*10 + 1);
else

tmp1 := to_char(to_number(tmp1) + 1);

end if;
-- now tmp1 holds new sp id...
--
--
--
:sp.spid := tmp1; -- the new record
go_item('sp.spname');


end if;
end;



ولكن عند التنفيذ ..
يكرر نفس رقم التخصص في كل السجلات ولا يأخذ الماكس للسجلات!!
اين الخطأ
الرجاء مساعدتي

!

اين الخطأ !!

تم التعديل بواسطة ليلاس, 09 May 2005 - 11:52 AM.


#2 medosal

medosal

    عضو

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

تاريخ المشاركة 09 May 2005 - 12:59 PM

يتم تكرار نفس القيمه و لا ياخذ max لسبب بسيط انه لابد من عمل commit بعد كل سجل تقوم بإدخاله
حتى يتم احتسابه ضمن القيم الموجوده فى الجدول
مثلا لدينا فى الجدول اكبر قيمه =100
وفى الفورم يوجد قيمه 200 فى هذه الحاله اكبر قيمه هى الموجوده بالفعل بالجدول =100
لجعلها = 200 لابد من عمل commit;

#3 ابو صالح

ابو صالح

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

  • المجموعة الماسية
  • 1,253 مشاركة
  • البـلـد: Country Flag
  • المنصب الحالي:(رحمه الله)

تاريخ المشاركة 09 May 2005 - 04:56 PM

اعتقد ان اول خطأ قمت به اخي العزيز هو اختيارك عنوان غير مناسب للموضوع ،، ارجو تعديله




تحياتي ،،،

<span style='font-size:11pt;line-height:100%'>
زكاة العلم نشرة

Oracle Certifed Expert, OCE RAC
Oracle Certified Professional OCP 9i,10g
ITIL v3

</span>


#4 yaso2com

yaso2com

    عضو

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

تاريخ المشاركة 09 May 2005 - 06:56 PM

بحسب معلوماتي و الله يعلم انه من المفروض ان يكوت الكود
في التريجر على مستوى البلوك الذي به الرقم
pre insert
هذا اولا ثم
لقد عدلت في الكود قليلا كما يلي :
--------------------
declare
tmp1 varchar2(5);
begin

select max(NVL(to_number(spid),1))
into tmp1
from sp
where sp.colid = :collage.colid;

if tmp1 is null then
tmp1 := to_char(to_number(:collage.colid)*10 + 1);
else
tmp1 := to_char(to_number(tmp1) + 1);
end if;

:sp.spid := tmp1;
end;
-----------------------------
و عندما تحفظين يتم ادخال الرقم آليا
-----------------------------
و الله ولي التوفيق
oracle beginner