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

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

صورة
- - - - -

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


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

#1 AHLAM ABDULLH SADAGH

AHLAM ABDULLH SADAGH

    مشترك

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

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

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

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


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

AHLAM ABDULLH SADAGH
COMPUTER PROGRAMMER
SANA'A
YEMEN

#2 fattah286

fattah286

    مشترك

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

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

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

exception when no_data_found then
null;

م/عبدالفتاح الشهاب
اليمن-صنعاء
عبدالفتاح الشهاب
اليمن-صنعاء
fattah286@yahoo.com

#3 هانى سند

هانى سند

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

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

تاريخ المشاركة 24 March 2007 - 02:44 PM

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

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

عند عمل 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;
و هذا يعتبر القسم الخاص بمعالجة الاستثناء اذا لم يكن هناك بيانات في حالة التعديل او الحذف

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

#4 AHLAM ABDULLH SADAGH

AHLAM ABDULLH SADAGH

    مشترك

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

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

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

مع جزيل الشكر
و تحياتي إاليكم
احلام صدقه.
مبرمجة كمبيوتر.
صنعاء /اليمن..
AHLAM ABDULLH SADAGH
COMPUTER PROGRAMMER
SANA'A
YEMEN

#5 هانى سند

هانى سند

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

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

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

السلام عليكم

أخت أحلام

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

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

SQL%ROWCOUNT

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

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

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

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

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

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


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

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