Обработка ошибок или обработка исключений в Netezza

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

  •  29-07-2022
  •  | 
  •  

Вопрос

Я запускаю процесс Netezza SQL как часть сценария оболочки, и в одном из кодов SQL я хочу, чтобы он вызвал ошибку или исключение, если количество строк из 2 разных таблиц не совпадает.

SQL Code:

/*  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 ;

Как сравнить 2 -й строки и поднять исключение/ошибку в процессе 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, ужасно, ужасная 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