2016-11-10 82 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