تقييم الدرس 20: الحلقات على النتائج والمؤشرات. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».
1السؤال الأول: اختر الإجابة الصحيحة
1) ترتيب خطوات المؤشر الصريح:
2) كم سطرًا يطبع هذا الكود؟
query.sql
DO $$DECLARE r record;BEGINFOR r INSELECT name FROM products WHERE category_id = 1LOOPRAISENOTICE'%', r.name;ENDLOOP;END $$;
3) c customers%ROWTYPE يعني:
4) ماذا يحدث إن نُسي EXIT WHEN NOT FOUND؟
5) في MySQL يُكتشف انتهاء المؤشر بـ:
2السؤال الثاني: صح أم خطأ
1) حلقة FOR على استعلام تفتح المؤشر وتغلقه تلقائيًّا.
الصواب: صح
2) المؤشر لا يقبل معاملات.
الصواب: خطأ
3) %ROWTYPE موجود في PostgreSQL و Oracle.
الصواب: صح
4) المؤشر الصريح يسمح بالتوقف قبل قراءة كل الصفوف.
الصواب: صح
5) الحلقة على الصفوف أسرع دائمًا من أمر SQL واحد.
الصواب: خطأ
3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة
1) لجلب الصف التالي من المؤشر نكتب cur INTO v;
الإجابة: FETCH
2) المتغير الذي يحمل صفًّا من أي استعلام نوعه .
الإجابة: record
3) بعد الانتهاء من المؤشر نكتب cur;
الإجابة: CLOSE
4السؤال الرابع: أسئلة عملية
1) ما ناتج هذا الكود؟
query.sql
CREATETABLE t (n int);DO $$DECLARE r record;BEGINFOR r INSELECT id FROM categories LOOPINSERTINTO t VALUES (r.id * 10);ENDLOOP;END $$;SELECTsum(n) FROM t;
الناتج الصحيح:
النتيجة · صف واحد
sum
150
2) ما ناتج هذا الكود؟
query.sql
CREATETABLE t (s text);DO $$DECLARE cur CURSORFORSELECT name FROM customers ORDERBY id; n text;BEGINOPEN cur;FETCH cur INTO n; FETCH cur INTO n;INSERTINTO t VALUES (n);CLOSE cur;END $$;SELECT s FROM t;