قوة أوراكل مزود

بعد قراءة موضوع اليوم "SQL. تذكر المهام التي كنت أرغب فيها منذ فترة طويلة في أن أوصي بكتاب ممتاز للمستوى المتقدم في Oracle SQL من أخصائي Oracle المتميز ، Alex Reprintsev - "The Power of Oracle SQL". ليس فقط مفيد للغاية في حد ذاته لأولئك الذين يرغبون في معرفة Oracle SQL على مستوى عالٍ ، بل إنه مجاني أيضًا! بالإضافة إلى ذلك ، هناك إصدارات باللغتين الروسية والإنجليزية.

بشكل عام ، روابط للكتاب نفسه .

ومناقشة الكتاب نفسه مع المؤلف .

ولزرع بضعة أمثلة لمهام منه:

  • المكونات المتصلة
    هناك رسم بياني غير موجه (غير اتجاهي) معرف بواسطة قائمة الحواف و
    مطلوب للحصول على المكونات المتصلة.

    للحصول على البيانات في الجدول أدناه:

    create table edge(x1, x2) as select 10,20 from dual union all select 50,40 from dual union all select 20,30 from dual union all select 20,40 from dual union all select 60,70 from dual union all select 80,60 from dual union all select 20,90 from dual; 

    النتيجة التالية متوقعة (ترتيب ترقيم المكونات غير حاسم):

      X GRP --- ----- 10 1 20 1 30 1 40 1 50 1 60 2 70 2 80 2 90 1 

  • طلب التبعيات
    الآن النظر في المشكلة على الرسم البياني الموجه (الموجه).
    هناك جدول مع التبعيات بين الكائنات التي لا تحتوي على دوري
    تبعيات. ومع ذلك ، قد يوجد أكثر من مسار بين أزواج القمم ، لذلك
    لا يمكن أن يسمى هذا الهيكل شجرة.

     create table d(name, referenced_name) as (select null, 'a' from dual union all select null, 'd' from dual union all select 'a', 'b' from dual union all select 'd', 'b' from dual union all select 'b', 'e' from dual union all select 'b', 'c' from dual union all select 'e', 'c' from dual); 

    من الضروري الالتفاف على جميع الكائنات بأقل عدد من الخطوات ، في كل خطوة
    يمكنك تجاوز فقط تلك الكائنات التي يتم تجاوز جميع الكائنات التابعة لها. هذا هو ، على
    تتخطى الخطوة الأولى الكائنات التي ليس لها تبعيات ؛ في الخطوة الثانية ، الكائنات التي تعتمد
    من الكائنات من الخطوة الأولى وهلم جرا. بمعنى آخر ، تبعيات العمق مرقمة.
  • تغطي النطاقات
    افترض أن هناك جدول بالشكل التالي:

     create table t_range(a, b) as (select 1, 15 from dual union all select 3, 17 from dual union all select 6, 19 from dual union all select 10, 21 from dual union all select 17, 26 from dual union all select 18, 29 from dual union all select 20, 32 from dual union all select 24, 35 from dual union all select 28, 45 from dual union all select 30, 49 from dual); 

    ب> أ لكل زوج أ ، ب ؛ فريدة من نوعها

    من الضروري الحصول على الأجزاء (1:15) ، (17:26) ، (28:45) ، وهذا هو ، نبدأ من السطر مع
    الحد الأدنى a ، واتخاذ السطر التالي بحيث يكون أكبر من b من السطر الحالي وهكذا
    على.
  • المسارات العليا
    بالنسبة للجدول الذي يحتوي على قائمة من الدلائل في نظام الملفات ، قم بإخراج فقط تلك التي ليس لديها
    الدلائل.

     create table t_path(path) as select '/tmp/cat/' from dual union all select '/tmp/cata/' from dual union all select '/tmp/catb/' from dual union all select '/tmp/catb/catx/' from dual union all select '/usr/local/' from dual union all select '/usr/local/lib/liba/' from dual union all select '/usr/local/lib/libx/' from dual union all select '/var/cache/' from dual union all select '/var/cache/'||'xyz'||rownum||'/' from dual connect by level <= 1e6; 

    بالنسبة للبيانات المشار إليها ، ستكون النتيجة:

     PATH ------------------------------------------------------- /tmp/cat/ /tmp/cata/ /tmp/catb/ /usr/local/ /var/cache/ 

Source: https://habr.com/ru/post/ar461971/


All Articles