2016-11-10 12 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/#!9/9eecb7db5/1197]。自動/スケジュールされたプロセスの一部として、マップされていない/新しい 'campaign_group_name'があるかどうかを検出し、そうであれば、次のステップに進まないことを計画しています。私は行ごとに処理しようとしていません。 'campaign_group_names_to_map'テーブルに行があるかどうかを確認したいのですが、上記のフィードバックのStep4を超えて進まないでください。あなたが提供できるアドバイスをありがとうございます! – user1330974

+1

だから、Verticaについてのいくつかのこと。実際にはストアドプロシージャはありません(ただし、UDXはありますが、サーバーレベルでインストールする必要があり、クエリを実行してそのようなフロー制御を行うことはできません)。スクリプトでsqlを実行するユーティリティは 'vsql'です。それは、あなたがしようとしているものに関して機能が制限されています。 'vsql'にはフロー制御がありません。私は、Pythonのようなスクリプト言語を使うか、 'vsql'呼び出しをラップするシェルスクリプトを書くことをお勧めします。おそらくエラー状態を強制する方法がありますが、それは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

関連する問題