16.20 - 入力ホスト変数 - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQL ストアド プロシージャおよび埋め込みSQL

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1148-162K-JPN

ホスト変数入力を含む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で使用することはできません。

リクエスト内の入力ホスト変数は、パラメータ マーカーと呼ばれる疑問符(?)トークンによって表わされます。

SQL文が実行されると、Preprocessor2は、疑問符(?)トークンの適切なホスト変数を以下のいずれかの方法で置き換えます。
  • ホスト変数名の使用によって
  • 変数を記述する入力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に、疑問符(?)パラメータ マーカー トークンに代わるものとして渡します。

関連トピック

以下に関する詳細な情報