2016-11-10 3 views
0

В Vertica я хотел бы прекратить выполнение скрипта, если встречается определенное условие. Например, если мой скрипт обнаруживает, что таблица имеет ненулевые строки, то остальная часть скрипта больше не должна запускаться (то есть сценарий должен выйти) и поднимать какое-то сообщение об ошибке (например, RAISEERROR в SQL SERVER) ,Как остановить или разбить (или повысить ошибку) выполнение скрипта в Vertica

я могу думать только оберточной остальную часть сценария с CASE WHEN, как это:

CASE 
WHEN (
     SELECT 
      COUNT(*) 
     FROM 
      my_table) <= 0 THEN 
    'the rest OF the script here' 
ELSE 
    'ALERT: Make sure there is nothing left in my_table' 
END 

, но мне интересно, если есть альтернатива (больше стандартного) подхода в Vertica. Заранее благодарю за ваши предложения!

+1

Вы конкретно говорите о 'vsql' сценариев? То, что у вас есть, не будет работать, если я пойму, когда вы пытаетесь сделать это правильно. Не могли бы вы привести пример сценария? Также знайте, что Vertica не является базой данных OLTP, она похожа на то, что вы планируете выполнять обработку строк за строкой. Если это так, мое предложение ... не надо. – woot

+0

@woot, Спасибо за ответ. Я использую скрипт vertica sql (vsql?), И он доступен здесь [http://sqlfiddle.com/#!9/9eecb7db5/1197]. План состоит в том, чтобы обнаружить как часть автоматизированного/запланированного процесса, если есть какое-либо unmapped/new 'campaign_group_name', и если это так, не переходите к следующим шагам. Я не пытаюсь обрабатывать строки за строкой. Просто хотелось увидеть, имеет ли таблица 'campaign_group_names_to_map' какая-либо строка, не переходите за пределы Step4 в скрипте выше. Спасибо за любой совет, который вы можете предоставить! – user1330974

+1

Хорошо, так что пара вещей о Вертике. На самом деле у него нет хранимых процедур (хотя у него есть UDX, но он должен быть установлен на уровне сервера и на самом деле не позволяет вам делать такие вещи, как запуск запросов и управление потоком). Утилита запуска sql в скрипте - 'vsql'. Он имеет ограниченную функциональность в отношении того, что вы пытаетесь сделать. В 'vsql' нет управления потоком. Я бы рекомендовал использовать скриптовый язык, например python, или написать сценарии оболочки, обертывающие вызовы 'vsql'. Есть способ, возможно, заставить условие ошибки, но это скорее взлом vsql. – woot

ответ

-1

Если кто-то хочет знать, как заставить ошибку в Vertica, используя CASE WHEN, это один из способов:

SELECT 
     CASE 
      WHEN a.cnt = 0 
      THEN 'do something' 
      ELSE 'do other thing' 
     END 
FROM 
    (
     SELECT 
      COUNT(*) AS cnt 
     FROM 
      my_table) AS a; 
+0

Это не вызывает ошибку, если таблица имеет 0 строк. – duber