CLPPlus のバインド変数

バインド変数はリテラル値の代わりに使用されます。 SQL ステートメントを複数回発行する場合、バインド変数を使用してリテラル値の数を減らすことができます。

許可

特別な許可は必要ありません。

宣言

バインド変数は、次の構文を使用して宣言できます。

構文図を読む構文図をスキップするVARIABLEnamedatatype;
name
バインド変数の名前を指定します。
datatype
バインド変数に関連付けられるデータ・タイプを指定します。 データ・タイプは、BOOLEAN、CHARACTER、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、REAL、SMALLINT、VARCHAR のいずれかです。
REFCURSOR もサポートされています。 REFCURSOR は、プロシージャー、関数、および PL/SQL の無名ブロックの中で、タイプ CURSOROUT パラメーターの値を受け取るために使用されます。
NUMBER、NUMBER(p[,s])、および VARCHAR2 もサポートされています。NUMBER および NUMBER(p[,s]) は暗黙的に DECIMAL データ・タイプにマッピングされます。VARCHAR2 は暗黙的に VARCHAR データ・タイプにマッピングされます。
CLPPlus では、ストアード・プロシージャーのパラメーターとしてデータ・タイプ BOOLEAN、ROW、および ARRAY を使用できます。ストアード・プロシージャーは、CALL または EXEC CLPPlus ステートメントで実行できます。

有効範囲

バインド変数は、ユーザーの CLPPlus セッション中は存続します。 CLPPlus セッションが開始すると、バインド変数を宣言してそのセッション中に使用することができます。 CLPPlus セッションが終了すると、すべてのバインド変数はクリアされます。

制約事項

SQL ステートメントまたは PL/SQL の無名ブロックで使用する場合、バインド変数は一回のみ出現可能です。 バインド変数を複数回使用すると、データベース・サーバーからエラーが戻されます。

これらの制限は、EXECUTE CLPPlus コマンドにも適用されます。

以下の例は、 バインド変数の定義、初期化、および使用の方法を示すものです。

  1. 名前が ID および LNAME で、タイプが VARCHAR のバインド変数:
     VARIABLE ID VARCHAR
     VARIABLE LNAME VARCHAR
  2. 名前が ID で、PL/SQL ブロック内で初期化されるバインド変数:
    BEGIN
       :ID := '000020';
    END;
    /
  3. PL/SQL ブロック内で使用されるバインド変数 ID および LNAME:
    BEGIN
       SELECT lastname INTO :LNAME FROM employee
    	WHERE empno = :ID;
    END;
    /
  4. 単一の PL/SQL ステートメントがバインド変数 ID を初期化します。
    EXECUTE :ID := '000022';
  5. 変数 ID を置換変数 a に基づいて初期化します (aDEFINE CLPPlus コマンドにより定義されています)。
    EXECUTE :ID := &a;
  6. ID バインド変数を SELECT ステートメント内で使用します。
    SELECT lastname FROM employee WHERE empno = :ID;
  7. バインド変数 ID および LNAME を UPDATE ステートメント内で使用します。
    UPDATE employee SET lastname = :LNAME WHERE empno = :ID;
  8. salary バインド変数を number データ・タイプで定義します。
    variable salary number
    exec :salary := 1000.00
  9. bonus バインド変数を number(p[,s]) データ・タイプで定義します。
    variable bonus number(6)
    exec :bonus:= 999.999
  10. comm バインド変数を number(p[,s]) データ・タイプで定義します。
    variable bonus comm(4,2)
    exec :comm:= 10.455
    
    SQL> print comm
    10.45	
  11. name バインド変数を varchar2 データ・タイプで定義します。
    variable name varchar2
    exec :name:='MICHAEL'
  12. この例では、プロシージャーの実行中に、バインド変数を入出力引数として置換することを示します。example_proc.db2 ファイルに次のステートメントが含まれていると仮定します。
       CREATE PROCEDURE DEPT_MEDIAN 
       (IN deptNumber SMALLINT, OUT medianSalary DOUBLE)
    バインド変数が入力引数および出力引数として置換されます。 バインド変数を次のように定義します。
       variable in_var integer
       variable out_var double
    プロシージャーを実行し、変数をパラメーターとして置換します。
       call dept_median(:in_var, :out_var)
    オプションで、out_var バインド変数である出力引数の内容を出力します。
       print out_var
  13. この例では、バインド変数 var1 を示します。この変数は、定義内の精度を反映しません。
       variable var1 number(4,2)
       Db250000I: The command completed successfully.
    精度が 6 桁で、位取りが 3 桁の値を割り当てます。
       exec :var1 := 333.333
       /
    Db250000I: The command completed successfully.
    var1 の内容を出力します。
       print var1
       333.33
    位取りは 2 で正しいですが、精度は定義された 4 ではありません。 このシナリオは、現在の機能上の制約です。