IF...THEN... - Basic Teradata Query

Basic Teradata Queryリファレンス

Product
Basic Teradata Query
Release Number
16.20
Published
2018年4月
Language
日本語
Last Update
2019-07-03
dita:mapPath
ja-JP/moy1512703123963.ditamap
dita:ditavalPath
ja-JP/moy1512703123963.ditaval
dita:id
B035-2414
Product Category
Teradata Tools and Utilities

目的

入力スクリプトの一部を条件付きで実行するために使用されます。IF句には、複数のステータス値をテストできるように、1つ以上の条件を含めることができます。これらの個別のチェックは、ANDまたはORを使用してまとめることや、NOT演算を介して無効にすることができます。総合的なテスト結果がTRUEであることが判明すると、THEN句の処理が実行されます。

THEN句は、SQLリクエストまたは別のBTEQコマンドで構成できます。コマンドとしてGOTOを使用すると、BTEQは1つ以上の後続のスクリプト命令をスキップできます。これは事実上、入力スクリプト内にエラー処理ルーチン セクションを作成するための"エラー時分岐"ロジックを用意するための方法を提供します。

構文



次のような場合に当てはまります。

conditions
ネストすることができる1つ以上の条件チェックです。各チェックの基本形式は、ステータス値の範囲内の整数と比較したステータス値キーワードです。すべてのステータス値キーワードを使用できます。詳細については、ステータス値のキーワードを参照してください。
有効な比較演算子
条件 定義
= 等しい
<>、!=、~=、または ^= 等しくない
> 大きい
>= 大きいか等しい
< 小さい
<= 小さいか等しい
複数のチェックが使用される場合は、AND、OR、NOTキーワードを使用して評価処理を記述する必要があります。それぞれのチェックと処理結果は、括弧で囲む必要があります。同じ括弧のペア内で処理の組み合わせを使用することはできません。
instruction
1つのSQLリクエストまたは1つ以上のBTEQコマンド。

使用上の注意

Teradata SQLマクロでIF...THEN...コマンドを使用する場合、THEN句に指定するBTEQコマンドはマクロでの使用が許されるコマンドでなければなりません。

例1 – データベース エラーのブランチ

直前のTeradata SQLリクエストで生成されたエラー コードが3000の場合に、NXTREPORTというラベルの付いたスクリプトに制御を渡すには、次のように入力します。

.IF ERRORCODE = 3000 THEN .GOTO NXTREPORT

例2 – 行が見つからないときのQUIT

Teradata SQLリクエストで行が見つからない場合に、戻りコードを1に設定するには、次のように入力します。

.IF ACTIVITYCOUNT = 0 THEN .QUIT 1

例3 – マクロによって出力されるIF

Teradata SQLマクロで使用する場合、このコマンドの形式は次のようになります。

ECHO '.IF ERRORCODE = 3000 THEN .REMARK ''Next'' ';

例4 - REPLACE PROCEDUREコンパイラ エラーの検出

自動化のために、ストアド プロシージャのREPLACEがデータベースによって正常に実行され、使用されているコンパイラがまだエラーを報告している場合に検出する必要がある場合があります。デフォルトでは、他で成功したコンパイルでエラーが発生したかどうかを判断する唯一の方法は、WARNINGCODEステータス値をチェックすることです。結果のERRORCODEが0になります。また、ACTIVITYCOUNT値は警告とエラーの合計総数になります。ただし、SQLストアド プロシージャ(SSP)の場合、5526警告コードを明示的にテストして、コンパイラがエラーを出したかどうかを確認できます。5527は警告のみを出していることを示します。ただし、コンパイラ自体がコンパイルを実行するために正しく構成されていない可能性もあります。これを検出するには、ERRORCODEステータス値をチェックする必要があります。単一の複数条件IFコマンドを使用すると、両方のテストを実行できます。次のIFコマンドは、COMPILEコマンドでいずれかのタイプのエラーが発生したかどうかを検出します。

.IF ((ERRORCODE!=0) OR (WARNINGCODE=5526)) THEN .GOTO errorpath

また、コンパイラの警告を検出することも目的の場合、WARNINGCODE値を0と比較する必要があります。

.IF ( NOT ((ERRORCODE=0) AND (WARNINGCODE=0)) ) THEN .GOTO errorpath
XSP(外部ストアド プロシージャ)とUDF(ユーザー定義関数)は、SSPとは異なり、何らかの方法で変更されると、関連付けられたライブラリに再コンパイルする必要があります。つまり、XSPに関連付けられたDROPアクティビティにはコンパイラの結果が含まれ、SSPのDROPアクティビティには含まれません。

例5 – 欠落しているインポート ファイルの検出

インポート ファイルが欠落している、または空のシナリオをエラー ケースと考えるユーザーもいれば、そうではないと考えるユーザーもいます。これをエラーとして検出するための方法の一つは、最初に.OSまたは.TSOコマンドを使用して、ファイルの状態を検出できるシステム コールを発行してから、IFコマンドを使用してSYSTEMRETURNCODEステータス値をテストすることです。UNIX BTEQで使用される主な命令シーケンスは次のとおりです。

.OS test -e myfile.txt
.IF SYSTEMRETURNCODE != 0 THEN .GOTO missingfile

PowerShellを使用するWindows BTEQの場合は、次のようになります。

.OS powershell "if ($false -eq (test-path -path myfile.txt)) {exit 1}"
.IF SYSTEMRETURNCODE != 0 THEN .GOTO missingfile