Question

J'exécute un processus SQL NETEZZA dans le cadre d'un script shell et dans l'un des codes SQL, je veux qu'il augmente une erreur ou une exception si le nombre de lignes de 2 tables différentes ne correspond pas.

Code 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 ;

Comment comparer le nombre de 2 lignes et augmenter une exception / erreur dans le processus SQL de NEtezza, afin qu'il quitte le processus, si les dénombrements de 2 lignes ne sont pas égaux?

Était-ce utile?

La solution

Je suis d'accord qu'un script est la meilleure option. Cependant, vous pouvez toujours faire le chèque dans votre SQL lui-même en utilisant une jointure croisée

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'

Autres conseils

Je suppose que la meilleure solution ici est de le faire dans le script.
IE Stockez le résultat du décompte (*) en variables, puis comparez-les. NZSQL a des options de ligne de commande pour ne renvoyer que les données de résultat d'une seule requête.

Si cela doit être fait en Plain SQL, une Kludge horrible et horrible qui fonctionnera est d'utiliser la division par zéro. C'est moche, mais je l'ai déjà utilisé lors du test des trucs. Du haut de ma tête:

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;

Ai-je mentionné que c'était moche?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top