معالجة الأخطاء أو التعامل مع الاستثناءات في Netezza

StackOverflow https://stackoverflow.com/questions/19847598

  •  29-07-2022
  •  | 
  •  

سؤال

أقوم بتشغيل عملية Netezza SQL كجزء من برنامج نصي shell وفي أحد رموز SQL ، أريد أن ترفع خطأ أو استثناء إذا كان عدد الصفوف من جدولين مختلفين لا يتطابق معها.

رمز SQL:

/*  The following 2 tables should return the same number of rows to make sure the process is correct */

select              count(*) 
from                (
                select distinct col1, col2,col3 
                from table_a
                where  week > 0 and rec >= 1
                ) as x ;


select              count(*) 
from                (
                select distinct col1, col2, col3
                from table_b
                ) as y ;

كيف يمكنني مقارنة تعداد الصف الثاني وأرفع استثناء/خطأ في عملية Netezza SQL ، بحيث تخرج من العملية ، إذا لم تكن تعداد الصف الثاني متساوية؟

هل كانت مفيدة؟

المحلول

أوافق على أن البرنامج النصي هو الخيار الأفضل. ومع ذلك ، لا يزال بإمكانك إجراء فحص في SQL نفسه باستخدام صليب انضمام

Select a.*
from Next_Step_table a cross join
(select case when y.y_cnt is null then 'No Match' else 'Match' end as match
from (select count(*) as x_cnt
from  ( select distinct col1, col2,col3 
        from table_a
        where  week > 0 and rec >= 1
       )) x left outer join
(select count(*) as y_cnt
from  (select distinct col1, col2, col3
       from table_b
       )) y  on x.x_cnt=y.y_cnt) match_tbl
where match_tbl.match='Match'

نصائح أخرى

أظن أن أفضل حل هنا هو القيام بذلك في البرنامج النصي.
أي تخزين نتيجة العد (*) في المتغيرات ، ثم قارنها. NZSQL لديه خيارات سطر الأوامر لإرجاع بيانات النتائج فقط لاستعلام واحد.

إذا كان يجب القيام به في SQL Plain ، فإن kludge الرهيبة والرهيبة التي ستعمل هي استخدام الفجوة على أساس الصفر. إنه قبيح لكنني استخدمته من قبل عند اختبار الأشياء. خارج الجزء العلوي من رأسي:

with 
subq_x as select count(*) c1 .... ,
subq_y as select count(*) c2 ...
select (case when (subq_x.c1 != subq_y.c1) then 1/0 else 1 end) counts_match;

هل ذكرت أن هذا قبيح؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top