1.6.1 埋込み変数,標識変数
- 〈この項の構成〉
(1) 形式
:埋込み変数〔:標識変数〕
(2) 機能と用途,及び指定箇所
埋込み変数,及び標識変数の機能とその用途,及び指定箇所を次の表に示します。
機 能 |
用 途 |
指定箇所 |
|
---|---|---|---|
埋込み変数 |
標識変数 |
||
ナル値以外の値を受け取ります。※1 |
ナル値も含む列の値を受け取るために,埋込み変数とともに使用して,埋込み変数に読み込んだ値がナル値かどうかを知ることができます。 また,受け取ったデータが文字データ,各国文字データ,混在文字データ,又は長大データの場合に,埋込み変数に正しく受け取れたかどうかを知ることができます。 |
SELECT文,FETCH文,EXECUTE文,EXECUTE IMMEDIATE文のINTO句 |
|
ナル値以外の値を指定します。※1 |
ナル値を指定するために,埋込み変数とともに使用して,SQLに渡す埋込み変数の値がナル値かどうかを指示します。 |
SQL中に指定する定数の値を変えて実行する場合に,定数の代わりに指定します。 |
|
ナル値以外の値を指定します。※1 |
ナル値を指定するために,埋込み変数とともに使用して,SQLに渡す埋込み変数の値がナル値かどうかを指示します。 |
PREPARE文で前処理するSQL中,又はEXECUTE IMMEDIATE文で前処理・実行するSQL中で指定した?パラメタに対する値を指定するために,EXECUTE文,OPEN文,EXECUTE IMMEDIATE文のUSING句に指定します。※2 |
|
(埋込み変数) カーソル宣言中で指定したSELECT文中の埋込み変数の代わりに,ほかの埋込み変数を指定します。 |
− |
OPEN文のUSING句 |
|
UAPの実行時に生成したSQLを前処理して実行するために,SQL文字列を指定します。 |
− |
PREPARE文,EXECUTE IMMEDIATE文 |
|
UAPの実行ユーザをHiRDBに連絡します。 |
− |
CONNECT文の認可識別子,及びパスワード |
(凡例)−:該当しません。
- 注※1
-
ナル値も扱う場合は,標識変数を指定する必要があります。標識変数の値については,「標識変数の値の設定」を参照してください。
- 注※2
-
OPEN文のUSING句には,標識変数は指定できません。
(3) 埋込み変数及び標識変数のデータ型と各言語のデータ記述の関係
埋込み変数及び標識変数をUAP中に記述するとき,データ変換を起こさないでSQLとUAPとの間でデータの受け渡しをするためのデータ型とデータ記述の関係については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
(4) 埋込み変数及び標識変数の修飾指定
(a) COBOL言語の場合
埋込み変数,及び標識変数を集団項目で修飾できます。
- 集団項目で修飾する場合の形式:
:〔変数名1.〕変数名2
修飾した結果,埋込み変数,又は標識変数は一意に定まるように指定してください。修飾する必要のない名前を修飾してもかまいません。また,一意に修飾する組み合わせが幾つかある場合,どれを使用してもかまいません。
変数名1は,変数名2が従属する集団項目です。
(b) C言語の場合
構造体のメンバを,構造体又は構造体のポインタで修飾できます。
- 構造体で修飾する場合の形式:
:構造体名.メンバ名
- ポインタで修飾する場合の形式:
:ポインタ名->メンバ名
(5) 埋込み変数とSQLのデータ型の関係
UAP中の埋込み変数のデータ型とSQLのデータ型の代入の関係を次の表に示します。
埋込み変数のデータ型 |
SQLのデータ型 |
||
---|---|---|---|
文字データ型 |
各国文字データ型 |
混在文字データ型 |
|
文字データ型 |
○ |
△ |
○ |
各国文字データ型 |
△ |
○ |
△ |
混在文字データ型 |
○ |
△ |
○ |
- (凡例)
-
○:代入できます。
△:代入できるがデータ型に関係なく代入するため,注意が必要です(注2,注3)。
- 注1
-
文字データ型,各国文字データ型,混在文字データ型は固定長,又は可変長を含みます。
- 注2
-
データが短くデータの右側に空白を埋める場合は,次のようにします。
-
UAPの埋込み変数をSQLのデータ型に代入する場合
SQLのデータ型の空白を埋めます。文字集合の指定がある場合は,その文字集合の空白です。各国文字データ型の場合は全角空白です。
-
SQLのデータ型をUAPの埋込み変数に代入する場合
UAPの埋込み変数の,データ型の空白を埋めます。文字集合の指定がある場合は,その文字集合の空白です。各国文字データ型の場合は全角空白です。
ただし,各国文字データ型への代入の場合,クライアント環境定義のPDSPACELVL,又はシステム共通定義のpd_space_levelオペランドで空白変換レベルが設定されているとき,埋めた各国文字の空白も変換対象となります。そのため,各国文字の空白が2バイトの空白に変換される場合があります。
-
- 注3
-
各国文字の空白と1バイトの空白が混在するような使い方をすると,空白を含む比較などが意図したように実行できなくなるので注意してください。
- 注4
-
各国文字データ型の列に1バイト文字を代入しないでください。代入した場合,結果は保証できません。
- 注5
-
LIKE述語を使用した場合,パターン文字の特殊文字はSQLのデータ型の仕様に合わせてください。
- 注6
-
pdntenvコマンド(UNIX版の場合はpdsetupコマンド)で文字コード種別にutf-8,utf-8_ivs,又はchinese-gb18030を指定した場合,SQLの文字データ型又は混在文字データ型から,埋込み変数の各国文字データ型への代入はできません。また,埋込み変数の各国文字データ型から,SQLの文字データ型又は混在文字データ型への代入もできません。