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

معالجة الاستثناءات في حالة Update And Delete


AHLAM ABDULLH SADAGH

Recommended Posts

اود معرفة اليه إصطياد او مسك الاستثناءات الناتجه من تنفيذ عبارتي
ال UPDATE , ال DELETE عند عدم وجود بيانات في الجدول اي (WHEN NO DATA FOUND )
و الية معالجتها في تطبيقات الاوراكل ديفلوبر ال FORM BUILDER ..

احلام صدقه.
مبرمجة كمبيوتر.
صنعاء/اليمن..


تم تعديل العنوان
إدارة المنتدي

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

لمعالجة الأستثناء عند عدم وجود بيانات في الجدول WHEN NO DATA FOUND
تكتبين بعد أمرال select أو الupdate أو الdelete الأتي:

exception when no_data_found then
null;

م/عبدالفتاح الشهاب
اليمن-صنعاء

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

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

الأخت الكريمة

عند عمل update or delete
اذا لم يتم تحديث او حذف صفوف مطابقة للشرط و اعتقد ان هذا هو ما تسألين عنه
فلن ينتج عن ذلك استثناء او exception
فقط سينتج عن ذلك ان عدد 0 صف من الصفوف قد تم تعديله او حذفه
مثال

update emp  
set  sal=sal+100
where empno=9999;


فرقم هذا الموظف 9999 غير موجود و برغم ذلك فسيتم تنفيذ الجملة بنجاح و لكن لن يتم تحديث اي صفوف
و لمعرفة اذا كان قد تم التعديل او الحذف بنجاح
يمكنك استخدام البارمتر

sql%rowcount


و هو في حالة التعديل و الحذف و حتي الادخال سيحمل عدد الصفوف التي تم تحديثها او حذفها

فاذا لم يكن هناك بيانات تم تحيديثها او حذفها فسيكون ب 0

و يمكن استعماله كالتالي

if sql%rowcount=0 then  
.........................
end  if;


و هذا يعتبر القسم الخاص بمعالجة الاستثناء اذا لم يكن هناك بيانات في حالة التعديل او الحذف

مع تمنياتي بالتوفيق

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

شكراً جزيلاً للاخوين شهاب و هاني على الاهتمام بالموضوع و الرد عليه.
و اود ان اقول لك يا اخ شهاب انه عند تنفيذ تعليمة ال UPDATE و عدم تحقق شرط التعديل اي عدم و جود البيانات المطلوب تعديلها و كتابة تعليمة معالجة الاستثناء التاليه :
WHEN NO DATA FOUND
فإنه لايدخل الى هذه التعليمه اصلاً لمعالجة الاستثناء اي ان هذه التعليمه فاشله في الامساك بالاستثناء اولاً حتى نتمكن من معالجته ثانياً و قد جربت ذلك مسبقاً و هذا ما دفعني لوضع السؤال في المنتدى!!!!!
اخ هاني اشكرك على الرد و اود إخبارك بإني حالياً استخدم التعليمه التاليه :
IF SQL%NOT FOUND
لمعرفة عدم وجود السجل المطلوب تعديله و التي تؤدي الغرض المطلوب و لكني كنت ابحث عن تعليمه خاصه بمعالجة الاستثناءات لاني لا زلت اعتقد ان طريقتي و طريقتك تخص التعامل مع ال CURSOR و ليس معالجة الاستثناءات فهل يوجد لديك حل اخر...

مع جزيل الشكر
و تحياتي إاليكم
احلام صدقه.
مبرمجة كمبيوتر.
صنعاء /اليمن..

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

السلام عليكم

أخت أحلام

ٍSQL%NOT FOUND
لا تستخدم في حالات الابديت و الديليت
بل في السيليكت

و المناسب لاستخدام مع الابديت و الديليت هو ما قلت عليه سابقا

SQL%ROWCOUNT

و أساسا اي جملة سيليكت و ابديت او ديليت

يقوم الاوراكل بفتح cursor لها
و هو ما يسمي بالimplicit cursor

اي لا يوجد تعارض بين استخدام sql%rowcount مع جمل الابديت او الديليت لانها هي في الاساس عبارة عن cursor

كما ان طريقة الاستخدام في الكيرسور تحتلف حيث يجب استخدام اسم الcursor الذي قمنا بتعريفه في قسم ال declare

و ليس استخدام كلمة sql%...

و اكرر مرة اخري انه تنفيذ جملة ابديت او ديليت مع وجود شرط لا يرجع بيانات لن يكون هناك استثناء او اكسبشن
انما يمكن التحقق فقط عن طريق sql%rowcount


و ملحوظة هذه الطريقة مجربة كثيرا من قبل بفاعلية

مع تمنياتي بالتوفيق

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

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

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

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

×   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.

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

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

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