ホスト変数入力を含むSQL文が、処理のためにTeradata Databaseクライアントに送信されると、Preprocessor2はその入力値を、対応するホスト入力変数から取り出し、それを処理のためにTeradata Databaseに送信します。
ストアド プロシージャでは、ホスト入力変数はINパラメータと言われます。ストアド プロシージャの別の種類のパラメータのINOUTは、プロシージャにデータを渡したり、プロシージャからデータを取り出すのに使用されます。
ルール
- 入力メイン ホスト値が、WHERE句の式で、またはSELECTリストの一部として使用されるときは、ホスト変数のデータ型と式のデータ型は、同じドメインから取り出されなければなりません。
このように使用される入力メイン ホスト変数として、標識ホスト変数を指定することはできません。
- 入力メイン ホスト値を、INSERTまたはUPDATEにデータを提供するために使用する場合、ホスト変数のデータ 型と式のデータ型は、同じドメインから取り出されなければなりません。
Teradata SQLでは、文字タイプと数字タイプの混在を許可しています。
このように使用される入力メイン ホスト変数として、標識ホスト変数を指定することはできます。このデータ型のルールは、関連付けられた標識ホスト変数(参照)が指定され、かつ標識変数がNULLを示す場合は、入力メイン ホスト変数には適用されません。
- 標識変数が、NULL受入不可能なテーブルの列に対応する入力メイン ホスト変数に指定されている場合、標識変数は必ずNULLでないことを示さなければなりません。
- CHARACTERホスト変数をVARCHARフィールドへの入力として使用する場合には、注意が必要です。
システムでは、すべての後続ブランクをホスト値から除去します。これはホスト変数に含まれている単一ブランクも対象となります。
例えば、CHARACTER(3)で型指定された値A(’A’)のホスト変数がVARCHAR(10)で型指定されたTeradata Databaseフィールドにロードされると、結果として、可変長が1と設定された値A(’A’)になります。末尾の2つの埋め込み文字は失われます。
同様に、ホスト変数の長さが1でフィールドの値がブランクの場合、VARCHARフィールドはブランクでもNULLでもなく、長さが0の文字列です。
この特徴は、すべての埋め込み文字を維持したままVARCHARフィールドに渡す他のシステムとは異なります。VARCHARフィールドで埋め込み文字を維持するには、長さがnumber_of_characters + number_of_pad_characters(文字数プラス埋め込み文字数)であるVARCHARフィールドとしてホスト変数を定義してください。例えば、’A’を含んでいるフィールドは、CHARACTER(3)ではなくVARCHAR(3)として定義する必要があります。
静的リクエストの入力ホスト変数
静的SQLリクエストで使用する入力変数は、SQL文の適切な場所で変数名を参照することによって指定します。
以下の文は、入力ホスト変数を使用した静的リクエストの例です。
EXEC SQL SELECT field1 FROM table1 WHERE field2 = :var1
:var1は、テーブルから選択される行を判別するために使用される、適切に定義されたホスト変数を表わします。
アプリケーションは、var1の値を、複数のSQL文の実行の合間に変更することができます。
動的リクエストの入力ホスト変数
- 動的カーソルのOPEN文を使用して実行されるもの
- EXECUTE文を使用して実行されるもの
入力ホスト変数をEXECUTE IMMEDIATEで使用することはできません。
リクエスト内の入力ホスト変数は、パラメータ マーカーと呼ばれる疑問符(?)トークンによって表わされます。
- ホスト変数名の使用によって
- 変数を記述する入力SQLDAの使用によって
例えば、以下の文が、動的名S1を使用して正常に準備されていると仮定します。
DELETE FROM table1 WHERE field1 = ?
疑問符(?)に置き換える変数を指定するために、アプリケーション コードには以下の文のいずれか1つが含まれます。
EXEC SQL EXECUTE S1 USING :var1
または
EXEC SQL EXECUTE S1 USING DESCRIPTOR INPUTDA
ここでINPUTDAは、プログラマ定義のSQLDA構造です。
文が実行されるときに、Preprocessor2はホスト変数から値を取り出し、それをTeradata Databaseに、疑問符(?)パラメータ マーカー トークンに代わるものとして渡します。
関連トピック
- INOUTについては、パラメータとIN、OUT、およびINOUTパラメータのルールを参照してください。
- 関連付けられている標識ホスト変数または標識変数については、標識変数を参照してください。