البرمجة

استرجاع صفوف بانتظام في Oracle SQL

عندما يكون لديك الحاجة في Oracle لاسترجاع صفوف بانتظام مثل النمط الذي تم تقديمه، يمكنك استخدام تقنية معينة لتحقيق ذلك باستخدام CTEs (Common Table Expressions) أو ما يُعرف بـ”شرطات الجدول المشتركة”، والتي تتيح لك توليد سلسلة من الأرقام ثم الانضمام إليها مع الجدول المزدوج DUAL الذي يستخدم للعمليات التي لا تتطلب جدولًا فعليًا.

لكن في هذه الحالة، تريد استرجاع أعمدة “num” و”random” بانتظام، بالإضافة إلى عمود “month” و “char” المطلوبين. من الواضح أن DUAL وظيفي لتوليد أرقام متسلسلة، لكنه لا يحتوي على المعلومات الإضافية المطلوبة. لذا سنحتاج إلى إجراء تغييرات في الاستعلام لتحقيق هذا.

في البداية، يمكنك استخدام CTE لتوليد الأرقام بانتظام مثلما فعلت في الاستعلام السابق. ثم يمكنك استخدام هذه الأرقام للانضمام إلى جدول يحتوي على معلومات الشهور والأحرف المطلوبة. لدينا القدرة على استخدام دالة الشبكة CONNECT_BY_ROOT لاستخراج قيم من الصف الأصلي في التسلسل.

وبمجرد أن يتم ذلك، يمكننا استخدام دالة النص الشائعة CASE للتحقق من الرقم الذي يتم انشاؤه واسترجاع الشهر والحرف المتوافقين.

في النهاية، سيكون الاستعلام على النحو التالي:

sql
WITH nums AS ( SELECT LEVEL AS num FROM DUAL CONNECT BY LEVEL <= 5 ) SELECT n.num, n.random, CASE n.num WHEN 1 THEN 'Jan' WHEN 2 THEN 'Feb' WHEN 3 THEN 'Mar' WHEN 4 THEN 'Apr' WHEN 5 THEN 'May' END AS month, CASE n.num WHEN 1 THEN 'a' WHEN 2 THEN 'b' WHEN 3 THEN 'c' WHEN 4 THEN 'd' WHEN 5 THEN 'e' END AS char FROM ( SELECT num, dbms_random.value AS random FROM nums ) n;

هذا الاستعلام يستخدم الـ CTE “nums” لتوليد الأرقام من 1 إلى 5. ثم يتم الانضمام إلى الجدول الفرعي “n” الذي يحتوي على الأرقام مع القيم العشوائية المولدة باستخدام دالة dbms_random.value. ثم يستخدم CASE لإعادة صياغة الأرقام إلى الشهور والأحرف المطلوبة.

بهذا، يمكنك الآن الحصول على النتيجة المطلوبة بانتظام باستخدام Oracle SQL.

المزيد من المعلومات

بالطبع، سأوفّر المزيد من المعلومات حول الاستعلام وكيف يتم تحقيق الهدف المطلوب.

أولاً وقبل كل شيء، يستخدم الجزء الأول من الاستعلام وحدة التعبير الشائعة (CTE) المسماة “nums” لإنشاء سلسلة من الأرقام من 1 إلى 5. يتم ذلك باستخدام جملة الاستعلام SELECT LEVEL AS num FROM DUAL CONNECT BY LEVEL <= 5. هنا، LEVEL هو وظيفة في Oracle تُستخدم في الاتصال بالصفوف المتسلسلة، وهو يعيد الصف الحالي من الاستعلام. تُستخدم DUAL في هذه الحالة لأننا لا نحتاج إلى جدول فعلي، ولكن نحتاج إلى شيء يمكننا الاتصال به لإنشاء الصفوف.

بعد ذلك، يتم استخدام جملة الاستعلام الرئيسية للانضمام إلى الجدول الفرعي "n" الذي يحتوي على الأرقام والقيم العشوائية المولدة. يتم استخدام الدالة dbms_random.value لإنشاء قيم عشوائية. ومن ثم، يتم استخدام جملة CASE لتعيين قيم الشهر والحرف المتوافقة بناءً على الأرقام المولدة. على سبيل المثال، عندما يكون الرقم 1، سيتم تعيين الشهر كـ "Jan"، والحرف كـ "a"، وهكذا.

بهذا الشكل، يتم الحصول على النتيجة المطلوبة التي تشبه النمط المطلوب في الاستعلام الأصلي.

يمكن أن نلاحظ أن هذا الاستعلام يوفر المرونة في إضافة معلومات إضافية أو تعديلها. على سبيل المثال، يمكن إضافة المزيد من الأرقام في سلسلة "nums" لاسترجاع مزيد من الصفوف، ويمكن تغيير الشروط المستخدمة في CASE لتحقيق الصفوف المطلوبة بناءً على المتطلبات الخاصة بك.

زر الذهاب إلى الأعلى