目的
入力スクリプトの一部を条件付きで実行するために使用されます。IF句には、複数のステータス値をテストできるように、1つ以上の条件を含めることができます。これらの個別のチェックは、ANDまたはORを使用してまとめることや、NOT演算を介して無効にすることができます。総合的なテスト結果がTRUEであることが判明すると、THEN句の処理が実行されます。
THEN句は、SQLリクエストまたは別のBTEQコマンドで構成できます。コマンドとしてGOTOを使用すると、BTEQは1つ以上の後続のスクリプト命令をスキップできます。これは事実上、入力スクリプト内にエラー処理ルーチン セクションを作成するための"エラー時分岐"ロジックを用意するための方法を提供します。
構文
次のような場合に当てはまります。
- conditions
- ネストすることができる1つ以上の条件チェックです。各チェックの基本形式は、ステータス値の範囲内の整数と比較したステータス値キーワードです。すべてのステータス値キーワードを使用できます。詳細については、ステータス値のキーワードを参照してください。
- 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
例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