2016-11-10 86 views
0

在Vertica中,如果某些條件滿足,我想停止運行腳本。例如,如果我的腳本發現表中有非零行,那麼腳本的其餘部分不應再運行(即腳本應該退出)並引發某種錯誤消息(例如,SQL SERVER中的RAISEERROR) 。如何在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/#99/9eecb7db5/1197]。作爲自動化/計劃過程的一部分,計劃是檢測是否有未映射的/新的'campaign_group_name',如果是,則不要繼續下一步。我不是試圖逐行處理。只是想看看'campaign_group_names_to_map'表是否有任何行,不要在上面的小提琴的Step4之後繼續。感謝您提供任何建議! – user1330974

+1

好吧,關於Vertica的一些事情。它實際上並沒有存儲過程(儘管它具有UDX,但需要在服務器級別安裝,並且不會真的讓你執行諸如運行查詢和流量控制之類的操作)。在腳本中運行sql的實用程序是'vsql'。它對你正在嘗試做的事情有限制的功能。 'vsql'中沒有流量控制。我會建議使用像python這樣的腳本語言,或者編寫包裝'vsql'調用的shell腳本。有一種方法可能會強制一個錯誤條件,但這是一種vsql破解。 – woot

回答

-1

如果有人想知道如何強制使用CASE WHEN在Vertica的錯誤,這也是一個辦法:

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