تقييم الدرس 18: معالجة الأخطاء: RAISE و EXCEPTION. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) أي أمر يوقف الإجراء ويُلغي تغييراته؟
2) ماذا يطبع هذا الكود؟
query.sql
DO $$BEGINPERFORM1 / 0;EXCEPTIONWHEN division_by_zero THENRAISENOTICE'قسمة على صفر';END $$;
3) SQLERRM يحتوي:
4) في MySQL يُرفع خطأ مخصص بـ:
5) الخطأ في WHEN OTHERS THEN NULL:
2السؤال الثاني: صح أم خطأ
1) RAISE NOTICE يوقف التنفيذ.
الصواب: خطأ
2) يمكن إضافة تلميح للخطأ بـ USING HINT.
الصواب: صح
3) التقاط الخطأ في كتلة داخلية يُلغي كل ما قبلها في الكتلة الخارجية.
الصواب: خطأ
4) OTHERS يلتقط أي خطأ.
الصواب: صح
5) مقابل unique_violation في Oracle هو DUP_VAL_ON_INDEX.
الصواب: صح
3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة
1) قسم التقاط الأخطاء في الكتلة يبدأ بـ .
الإجابة: EXCEPTION
2) رمز الخطأ من خمسة أحرف يُقرأ من .
الإجابة: SQLSTATE
3) لإعادة رفع الخطأ نفسه بعد تسجيله نكتب
الإجابة: RAISE;
4السؤال الرابع: أسئلة عملية
1) كم صفًّا في الجدول بعد التنفيذ؟
query.sql
CREATETABLE t (n intUNIQUE);DO $$BEGINFOR i IN1..5LOOPBEGININSERTINTO t VALUES (i % 3);EXCEPTIONWHEN unique_violation THENNULL;END;ENDLOOP;END $$;SELECTcount(*) FROM t;
الناتج الصحيح:
النتيجة · صف واحد
count
3
2) ما ناتج هذا الكود؟
query.sql
DO $$DECLARE n int;BEGINSELECT id INTOSTRICT n FROM customers WHERE city = 'تبوك';EXCEPTIONWHEN no_data_found THENRAISENOTICE'لا عملاء من تبوك';END $$;SELECTcount(*) FROM customers WHERE city = 'تبوك';