1.6.7 代入規則

代入の種類を次の表に示します。

表1-23 代入の種類

代入の種類内 容代入元代入先
取り出し代入列の値の受け取り埋込み変数,SQL変数,又はSQLパラメタ
手続きの出力パラメタ値の,CALL文の引数への受け取りSQLパラメタ埋込み変数,SQL変数,又はSQLパラメタ
関数のRETURN文に指定した値式から,戻り値への受け取り値式関数の戻り値
格納代入列への値の代入埋込み変数,SQL変数,又はSQLパラメタ
CALL文の引数から手続きの入力パラメタへの代入値式SQLパラメタ
関数呼出しの引数から関数のパラメタへの代入値式SQLパラメタ
代入文(SET)による値の代入SQL変数, SQLパラメタ,又は埋込み変数SQL変数, SQLパラメタ,又は埋込み変数
<この項の構成>
(1) 代入先が固定長データの場合
(2) 代入先が可変長データ,長大データ,BINARYの場合
(3) 異なる文字集合間の代入規則
(4) 代入先,代入元の構造規則

(1) 代入先が固定長データの場合

代入先が固定長の文字列データ,混在文字列データ,又は各国文字列データの場合,代入元のデータの長さによって代入規則が異なります。代入先が固定長データの場合の代入規則を次の表に示します。

表1-24 代入先が固定長データの場合の代入規則

代入の種類データ長
代入元1>代入先代入元1=代入先代入元1<代入先
取り出し代入23
格納代入×3
(凡例)
○:そのまま代入されます。
△:代入先のデータ長に合わせて,左寄せで代入されます。
×:エラーになります。
注※1
代入元が可変長のデータの場合,代入元のデータ長は実長となります。
注※2
データがあふれた右側部分は切り捨てられます。このとき,SQL連絡領域のSQLWARN1に警告情報が設定されます。また,標識変数の指定があると,切り捨てられる前のデータの長さが設定されます。
注※3
データが格納されていない右側部分に空白が埋められます。

(2) 代入先が可変長データ,長大データ,BINARYの場合

代入先が可変長の文字列データ,混在文字列データ,各国文字列データ,長大データ,又はBINARYの場合,代入元のデータの長さによって代入規則が異なります。代入先が可変長データの場合の代入規則を次の表に示します。

表1-25 代入先が可変長データの場合の代入規則

代入の種類データ長
代入元1>代入先2代入元1<代入先2
取り出し代入34
格納代入×4
(凡例)
△:代入先のデータ長2に合わせて,左寄せで代入されます。
×:エラーになります。
注※1
代入元が可変長のデータの場合,代入元のデータ長は実長となります。
代入元が位置付け子の埋込み変数の場合は,代入元のデータ長は位置付け子に割り当てられたデータの実長となります。
注※2
代入先のデータ長は,可変長データの最大長です。
代入先が位置付け子の埋込み変数の場合は,代入先のデータ長は次に示す長さとなります。
BLOB位置付け子  : 2147483647
BINARY位置付け子 : 2147483647
注※3
データがあふれた右側部分は切り捨てられ,実長は代入先の最大長となります。このとき,SQL連絡領域のSQLWARN1に警告情報が設定されます。また,標識変数の指定があると,切り捨てられる前のデータの長さが設定されます。
注※4
代入元が固定長のデータの場合,そのデータ長が実長となります。

(3) 異なる文字集合間の代入規則

代入元と代入先の文字集合が異なる場合の代入はできません。ただし,次の表に示す場合は代入できます。

表1-26 異なる文字集合間の代入ができる場合

代入元の文字集合代入先の文字集合
既定文字集合EBCDIKUTF16
既定文字集合※1※2
EBCDIK※3×
UTF16※4×
(凡例)
○:代入できます。
×:代入できません。
注※1
代入元の文字集合が既定文字集合(SJIS)で代入先の文字集合がEBCDIKの場合に代入できる組み合わせは次のとおりです。
代入元の値式代入先の値式
文字列定数又は埋込み変数任意の項目
注※2
代入元の文字集合が既定文字集合(UTF-8)で代入先の文字集合がUTF16の場合に代入できる組み合わせは次のとおりです。
代入元の値式代入先の値式
文字列定数又は埋込み変数任意の項目
上記以外の値式埋込み変数
注※3
代入元の文字集合がEBCDIKで代入先の文字集合が既定文字集合(SJIS)の場合に代入できる組み合わせは次のとおりです。
代入元の値式代入先の値式
値式埋込み変数
注※4
代入元の文字集合がUTF16で代入先の文字集合が既定文字集合(UTF-8)の場合に代入できる組み合わせは次のとおりです。
代入元の値式代入先の値式
埋込み変数任意の項目
値式埋込み変数

代入元と代入先の文字集合が異なる場合の代入は次のようになります。

  1. 取り出し代入の場合
    • 代入先の文字集合に変換してから代入します。このとき,変換後の文字データ長が代入先のデータ長よりも長い場合は,データのあふれた右側部分は切り捨てられ,SQL連絡領域のSQLWARN1に警告情報が設定されます。また,標識変数の指定があると,切り捨てられる前のデータの長さ(バイト数)が設定されます。
    • 代入先が固定長文字データで,代入する文字データ長が代入先のデータ長より短い場合は,代入先の文字集合で使用する空白を補って代入します。
  2. 格納代入の場合
    • 代入先の文字集合に変換してから代入します。このとき,変換後の文字データ長が代入先のデータ長よりも長い場合はエラーになります。
    • 代入先が固定長文字データで,代入する文字データ長が代入先のデータ長より短い場合は,代入先の文字集合で使用する空白を補って代入します。

(4) 代入先,代入元の構造規則

代入先の構造と代入元の構造が異なると,代入できない場合があります。代入先,代入元の構造規則を次の表に示します。

表1-27 代入先,代入元の構造規則

代入元の構造代入先の構造
単純構造繰返し構造
単純構造×
繰返し構造×
(凡例)
○:代入できます。
×:エラーになります。
添字付き繰返し列は,単純構造として扱います。