طَبِّقْهاتعلّم المبدأ، وطبّقه بيدكمقرر 122 · برمجة قواعد البيانات
تقييم الدرس 23

SQL الديناميكي الآمن: EXECUTE و format

أجب عن الأسئلة ثم اضغط «صحّح ورقتي» في آخر الصفحة. ← العودة إلى الدرس

أسئلة التقييم

تقييم الدرس 23: SQL الديناميكي الآمن: EXECUTE و format. إجاباتك تُحفظ تلقائيًّا على هذا الجهاز؛ أجب ثم اضغط «صحّح ورقتي».

1السؤال الأول: اختر الإجابة الصحيحة

1) متى نحتاج SQL الديناميكي؟
2) ما المشكلة في هذا السطر؟
query.sql
EXECUTE 'DELETE FROM orders WHERE status = ''' || s || '''';
3) format('%L', 'O''Brien') يُنتج:
4) في MySQL يُنفّذ الأمر الديناميكي بـ:
5) أسلم طريقة لاسم عمود الترتيب من المستخدم:

2السؤال الثاني: صح أم خطأ

1) USING يمرر القيم منفصلة عن نص الأمر.
الصواب: صح
2) %s آمن لأسماء الجداول.
الصواب: خطأ
3) يمكن حفظ نتيجة EXECUTE في متغير بـ INTO.
الصواب: صح
4) USING يستطيع تمرير اسم جدول.
الصواب: خطأ
5) الحقن قد يسمح بحذف بيانات أو تسريبها.
الصواب: صح

3السؤال الثالث: أكمل الفراغات من القائمة المنسدلة

1) لوضع اسم جدول بأمان: format('SELECT * FROM ', t)
الإجابة: %I
2) لتمرير قيمة إلى $1 في EXECUTE نكتب v
الإجابة: USING
3) لوضع قيمة نصية مهرَّبة في format نستخدم .
الإجابة: %L

4السؤال الرابع: أسئلة عملية

1) ما ناتج هذا الاستعلام؟

query.sql
SELECT format('SELECT %I FROM %I WHERE city = %L', 'name', 'customers', 'جدة');
الناتج الصحيح:
النتيجة · صف واحد
format
SELECT name FROM customers WHERE city = 'جدة'

2) ما ناتج هذا الكود؟

query.sql
CREATE FUNCTION find_unsafe(who text) RETURNS bigintLANGUAGE plpgsqlAS $$DECLARE  n bigint;BEGIN  EXECUTE 'SELECT count(*) FROM customers WHERE name = ''' || who || ''''  INTO n;  RETURN n;END;$$;SELECT find_unsafe($q$x' OR city = 'جدة$q$);
الناتج الصحيح:
النتيجة · صف واحد
find_unsafe
2
أجب عن الأسئلة ثم اضغط «صحّح ورقتي».

📝 معلم؟ أرسل ملاحظة للمؤلف عن هذا الدرس