CLPPlus のバインド変数
バインド変数はリテラル値の代わりに使用されます。 SQL ステートメントを複数回発行する場合、バインド変数を使用してリテラル値の数を減らすことができます。
許可
特別な許可は必要ありません。
宣言
バインド変数は、次の構文を使用して宣言できます。
- name
- バインド変数の名前を指定します。
- datatype
- バインド変数に関連付けられるデータ・タイプを指定します。 データ・タイプは、BOOLEAN、CHARACTER、DATE、DECIMAL、DOUBLE、FLOAT、INTEGER、REAL、SMALLINT、VARCHAR のいずれかです。
有効範囲
バインド変数は、ユーザーの CLPPlus セッション中は存続します。 CLPPlus セッションが開始すると、バインド変数を宣言してそのセッション中に使用することができます。 CLPPlus セッションが終了すると、すべてのバインド変数はクリアされます。
制約事項
SQL ステートメントまたは PL/SQL の無名ブロックで使用する場合、バインド変数は一回のみ出現可能です。 バインド変数を複数回使用すると、データベース・サーバーからエラーが戻されます。
これらの制限は、EXECUTE CLPPlus コマンドにも適用されます。
例
以下の例は、 バインド変数の定義、初期化、および使用の方法を示すものです。
- 名前が ID および LNAME で、タイプが VARCHAR のバインド変数:
VARIABLE ID VARCHAR VARIABLE LNAME VARCHAR - 名前が ID で、PL/SQL ブロック内で初期化されるバインド変数:
BEGIN :ID := '000020'; END; / - PL/SQL ブロック内で使用されるバインド変数 ID および LNAME:
BEGIN SELECT lastname INTO :LNAME FROM employee WHERE empno = :ID; END; / - 単一の PL/SQL ステートメントがバインド変数 ID を初期化します。
EXECUTE :ID := '000022'; - 変数 ID を置換変数 a に基づいて初期化します (a は DEFINE CLPPlus コマンドにより定義されています)。
EXECUTE :ID := &a; - ID バインド変数を SELECT ステートメント内で使用します。
SELECT lastname FROM employee WHERE empno = :ID; - バインド変数 ID および LNAME を UPDATE ステートメント内で使用します。
UPDATE employee SET lastname = :LNAME WHERE empno = :ID; - salary バインド変数を number データ・タイプで定義します。
variable salary number exec :salary := 1000.00 - bonus バインド変数を number(p[,s]) データ・タイプで定義します。
variable bonus number(6) exec :bonus:= 999.999 - comm バインド変数を number(p[,s]) データ・タイプで定義します。
variable bonus comm(4,2) exec :comm:= 10.455 SQL> print comm 10.45 - name バインド変数を varchar2 データ・タイプで定義します。
variable name varchar2 exec :name:='MICHAEL' - この例では、プロシージャーの実行中に、バインド変数を入出力引数として置換することを示します。example_proc.db2 ファイルに次のステートメントが含まれていると仮定します。
バインド変数が入力引数および出力引数として置換されます。 バインド変数を次のように定義します。CREATE PROCEDURE DEPT_MEDIAN (IN deptNumber SMALLINT, OUT medianSalary DOUBLE)
プロシージャーを実行し、変数をパラメーターとして置換します。variable in_var integer variable out_var double
オプションで、out_var バインド変数である出力引数の内容を出力します。call dept_median(:in_var, :out_var)print out_var - この例では、バインド変数 var1 を示します。この変数は、定義内の精度を反映しません。
精度が 6 桁で、位取りが 3 桁の値を割り当てます。variable var1 number(4,2) Db250000I: The command completed successfully.
var1 の内容を出力します。exec :var1 := 333.333 / Db250000I: The command completed successfully.
位取りは 2 で正しいですが、精度は定義された 4 ではありません。 このシナリオは、現在の機能上の制約です。print var1 333.33
