事前定義のシステム変数
定義済みのユーティリティ変数は接頭部&SYSで始まるので、ユーザー定義シンボルにはこの接頭部を使わないようにしてください。次の表に、定義済みのシステム変数を示します。
システム変数 | 説明 |
---|---|
&SYSDATE | 8文字の日付形式 yy/mm/dd |
&SYSDATE4 | 10文字の日付形式 yyyy/mm/dd |
&SYSDAY | 3文字の曜日: MON TUE WED THU FRI SAT SUN |
&SYSDELCNT[n} | インポートnで全ターゲット テーブルから削除された行の数。nを指定しないと、すべてのインポートで全ターゲット テーブルに実行された削除のカウントが変数の値になります。nの最大値は4です。 |
&SYSETCNT[n} | インポートnでエラー テーブルに挿入されたレコードの数。nを指定しないと、すべてのインポートでエラー テーブルに挿入された全レコードの合計カウントが変数の値になります。nの最大値は4です。 |
&SYSINSCNT[n} | インポートnで全ターゲット テーブルに挿入された行の数。nを指定しないと、すべてのインポートで全ターゲット テーブルに実行された挿入の合計カウントが変数の値になります。nの最大値は4です。 |
&SYSJOBNAME | 任意の文字セットの16文字(ASCIIまたはEBCDIC)までの長さ。 NAMEコマンドを使用して&SYSJOBNAMEを設定しない場合、デフォルトはMYYYYMMDD_hhmmss_lllll(次のような場合)です。 M = マクロ YYYY = 年 MM = 月 DD = 日 hh = 時 mm = 分 ss = 秒 lll = は、.LOGONコマンドからデータベースによって返されるログオン シーケンス番号の下位5桁。 |
&SYSOS | クライアントのオペレーティング システム
|
&SYSRC | データベースから最後に応答があった完了コード。 |
&SYSRCDCNT[n] | インポートnで読み取られたレコードの合計数。nを指定しないと、すべてのインポートで読み取られたレコードの合計が変数の値になります。 |
&SYSTIME | 8文字の時刻形式 hh:mm:ss |
&SYSUPDCNT[n] | インポートnで全ターゲット テーブルに実行された更新の合計。nを指定しないと、すべてのインポートで全ターゲット テーブルに実行された更新の合計が変数の値になります。nの最大値は4です。 |
&SYSUSER | クライアント システムによって異なります。 (z/OSバッチでは、RACF、ACF2、Top Secretなどのセキュリティ パッケージがインストールされている場合にのみ、ユーザーIDが戻されます。) |
&SYSAPLYCNT[n] | インポートnで適用されたレコードの数。nを指定しないと、すべてのインポートで適用されたレコードの合計数が変数の値になります。 |
&SYSNOAPLYCNT[n] | インポートnで適用されなかったレコードの数。nを指定しないと、すべてのインポートで適用されなかったレコードの合計数が変数の値になります。 |
&SYSRJCTCNT[n] | インポートnで拒否されたレコードの数。nを指定しないと、すべてのインポートで拒否されたレコードの合計数が変数の値になります。nの最大値は4です。 |
日付と時刻の変数
&SYSDATE、&SYSDATE4、&SYSTIME、および&SYSDAYは、Teradata TPumpの実行が開始された時刻を反映します。元の値は、再始動時に復元されます。これらの変数の値は文字データ型なので、数値演算で使用してはなりません。システム変数は変更できません。参照できるだけです。
&SYSDAYで戻される値はすべて大文字です。 例えば、月曜日は'MON'と戻されます。
0003 .IF '&SYSDAY' NOT = 'MON' THEN; 14:10:28 - FRI JUL 30, 1993 UTY2402 Previous statement modified to: 0004 .IF 'FRI' NOT = 'MON' THEN; 0005 .RUN FILE UTNTS39; 0006 .ENDIF;
上記の例の場合、RUN FILEコマンドは、月曜日を除いて毎日実行されます。この例からわかるとおり、IF/ELSE/ENDIFコマンド構造内の対象条件として任意のシステム変数を使用することができます。これにより、変数の現在の設定に基づいて、事前に定義した順序で特定のイベントを発生させたりタスクを実行させたりするスクリプトを作成できます。
別の例として、次のようなテーブルを作成したとします。
.SET TABLE TO 'TAB&SYSDAY'; Create table &TABLE ( Account_Number INTEGER NOT NULL, Last_Name VARCHAR(25), First_Name VARCHAR(25), Street_Address VARCHAR(30), City VARCHAR(20), State CHAR(2), Zip_Code CHAR(5) Balance DECIMAL(9,2) FORMAT '-$,$$$,$$$.99' ) Unique primary Index (Account_Number);
その後、システム変数&SYSRCの戻りコードを調べて、テーブルがすでに存在するかどうかを確かめます。いくつかのオプションの入ったファイルが実行されるか、コンソールに終了が記録されます。他のエラー戻りコードの場合はすべて、次のように、データベース エラーでジョブは終了します。
.SET CREATERC TO &SYSRC; .IF CREATERC = 3803 /* Table &TABLE already exists */ .RUN FILE RUN01; .ELSE .IF CREATERC <> 0 THEN .LOGOFF CREATRC; .ENDIF .BEGIN LOAD ----------; /* No errors returned. We can start the job.*/ /* TPump statements go here..... */ .END LOAD; .LOGOFF;
3803エラーが原因でRUN FILEコマンドが実行されたときに処理されるファイルRUN01には、次のようなオプションが入っています。
.DISPLAY '&SYSUSER: Table FOO already exists....' to FILE console; .DISPLAY '&SYSUSER: Reply <C> Continue anyway...' to FILE console; .DISPLAY '&SYSUSER: Reply <A> Abort this JOB....' to FILE console; .DISPLAY '&SYSUSER: Reply <C> or <A>.Default <A>' to FILE console; .ACCEPT RESPONSE FROM FILE CONSOLE; .IF RESPONSE <> 'C' THEN .LOGOFF CREATERC; /* Quit before we cause trouble */ .ENDIF;
行カウント変数
- &SYSDELCNT[n]
- &SYSETCNT[n]
- &SYSINSCNT[n]
- &SYSUPDCNT[n]
この値は、Teradata TPumpユーティリティ再始動ログ テーブルに格納され、クライアント システムまたはデータベースの再始動後に復元されます。
EXECUTE <macroname> INSERT|UPDATE|DELETEを使用する場合、Teradata TPumpがマクロによって実行される操作(INSERT、UPDATE、またはDELETE)を適切に特定するには、ユーザーに依存する必要があります。Teradata TPumpはターゲット テーブルの数を常に判別できるとは限らないため、すべてのターゲット テーブルに対し、1つの複合値のみを指定できます。既存の変数置換機能の使用により、新しいシステム変数はそれぞれ変数の定義が完了するとすぐに参照可能になります。新しい変数はインポートフェーズ中に定義され、END LOADコマンドの後、および Teradata TPumpジョブ スクリプトの後続のBEGIN LOADコマンドの前に参照する必要があります。
新しいシステム変数の値は、Teradata TPumpログ テーブルに格納しておき、再始動後に復元しなければなりません。
ユーティリティ変数
Teradata TPumpは、ユーティリティ変数をサポートしています。これらの変数は、SETコマンドまたはACCEPTコマンドのいずれかで設定されます。詳細については、Teradata TPumpコマンドに説明があります。
さらに、Teradata TPumpでは、実行時のTeradata TPumpの環境について情報を提供するいくつかのユーティリティ変数が事前定義されています。変数置換を行なう場合は、これらの変数名の前にアンパサンド(&)を付けなければなりません。名前の他の部分については、Teradata SQLの標準列名規則を守らなければなりません。
Teradata TPumpでは、実行されるDML文ごとに環境変数がサポートされます。インポートの終了時に、実行されたそれぞれの文ごとに1つの変数が設定されます。変数の名前には、インポートの番号(1~100)、DML文が「含まれている」句のラベル、およびIMPORTのapply句内の文の番号が使われます。
変数の置換
文の動的な変更に使用する変数置換は、任意の文で使用できます。変数を置換するには、変数名の前にアンパサンドを付けます。変数名は、前にアンパサンドが付いていれば、出現するたびに現行値に置き換えられます。数値を使うこともできます。ただし、その値は文字に変換されてから置換されます。この置換処理は、文の構文解析の前に行なわれます。1つの文の置換操作は1回しか実行されません(1回だけスキャンされる)。したがって、置換の結果としてアンパサンド付きの変数名が生成されても、その変数がさらに置き換えられることはありません。
アンパサンドが引用符で囲まれた文字列の中にあっても、それはユーティリティ変数の先頭文字として解釈されます。ただし、直後にもう1つのアンパサンドがある場合は例外です。そのような二重アンパサンドは、1文字のアンパサンド文字に変換されます。
ユーティリティ変数への参照の後に、変数に出現する可能性のある空白以外の文字が続く場合は、変数と空白以外の文字の間にピリオドを入れる必要があります。この場合のピリオドはTeradata TPumpによって除去されます。
例えば、&xというユーティリティ変数がxyという値を持ち、その変数の直後に.abという文字が続く場合に、xy.abという結果を得るには、変数と文字のシーケンスは&x..abとしなければなりません。このような二重ピリオドは、1つのピリオド文字に変換され、ユーティリティ変数の値に連結されます。