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

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

صورة
- - - - -

مامعنى exception وكيفية استخدامها


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

#1 fish

fish

    عضو نشط

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

تاريخ المشاركة 15 May 2006 - 09:28 AM

متى استخدم ال pragma
وما الفرق بينها وبين
raise_application_error
مع مثال

#2 هانى سند

هانى سند

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

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

تاريخ المشاركة 15 May 2006 - 10:46 AM

السلام عليكم
pragma exception_init
تستخدم لوضع نص لoracle exception
و التي لها رقم و لكن ليس لها نص
فهناك ثلاثة انواع من الexceptions
1-predifined exception like ora-01403 no data found
2- nonpredifined exception
like ORA-2292
و هو الخاص ب
integrity constraints
child record found
3-user defined exception
و هي اكسبشنز خاصة بالبروجرامر و ليست أخطاء في اداتا بيز
اي ممكن ان تنتج عن أخطاء ف ي البيزنس مثلا
pragma exception_initو ال
تستخدم لوضع إسم للنوع الثاني من الexceptions
حتي تسطيع التعامل معه في قسم exception
in ur block
اي تستطيع الاشارة إليه مثل
when no_data_found then
do actions here ;

اما
raise application_error فهي مجرد بروسيدر تستخدم في ال
triggers and stored procedures لعمل رسالة و إظهارها لليوزر في الابلكيشن
بالضبط مثل message built in في الفورم
و لا تستعمل لاي exception
هي فقط لعمل رسالة
و تظهر عندما يحدث خطا معين في الانسرت مثلا
و يقوم اليوزر ب عمل display error
و هذه مثال جاهز لل pragma exception_init
PROCEDURE delete_company (company_id_in IN NUMBER)
IS
   /* Declare the exception. */
   still_have_employees EXCEPTION;

   /* Associate the exception name with an error number. */
   PRAGMA EXCEPTION_INIT (still_have_employees, -2292);
BEGIN
   /* Try to delete the company. */
   DELETE FROM company 
    WHERE company_id = company_id_in;
EXCEPTION
   /* If child records were found, this exception is raised! */
   WHEN still_have_employees
   THEN
      DBMS_OUTPUT.PUT_LINE
         (' Please delete employees for company first.');
END;

WHEN still_have_employees
   THEN
      DBMS_OUTPUT.PUT_LINE
         (' Please delete employees for company first.');
END;
و يمكنك في الجزء السابق استعمال raise_application_error
حتي يظهر الخطا علي الابلكيشن
هكذا
WHEN still_have_employees
   THEN
  RAISE_APPLICATION_ERROR (-20121,'Please delete employees for company first.');
END;
أتمني ان تكون استفدت
بالتوفيق
  • cabo2133 معجب بهذا

#3 fish

fish

    عضو نشط

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

تاريخ المشاركة 15 May 2006 - 12:08 PM

اجابة سريعة واستفادة كبيرة وشكر وفير