5.5.4 送信定義文
抽出側DBから抽出した更新情報を,送信先識別子ごとに選択して送信するための定義をします。送信文は省略できます。送信文の指定方法によって,送信先へ送信される更新情報は異なります。送信文の指定と送信される更新情報を次の表に示します。
送信文の指定 |
送信される更新情報 |
|
---|---|---|
送信文で指定した送信先 |
送信文で指定していない送信先 |
|
送信文の指定なし(全省略) |
− |
全送信先に,すべての更新情報名の更新情報が送信されます。 |
一部の送信先に対して送信文を指定 |
送信文に指定した更新情報名の更新情報だけが送信されます。 |
すべての更新情報名の更新情報が送信されます。 |
すべての送信先に対して送信文を指定 |
− |
- 〈この項の構成〉
(1) 形式
〔{{ send 送信先識別子 from 更新情報名
〔 where 列名{比較演算子 定数|in(定数〔,定数〕…)
|flike(比較開始位置,定数)}
〔 and 列名{比較演算子 定数|in(定数〔,定数〕…)
|flike(比較開始位置,定数)}〕〕
}}…〕
(2) オペランドの説明
-
〜〈1〜8文字の記号名称〉
-
〜〈1〜8文字の記号名称〉
send句で指定した送信先識別子への送信対象にする更新情報名を,抽出文で指定した更新情報名の中から指定します。
更新情報名の先頭文字列が同じである複数の更新情報名を同一の送信先に送信する場合,半角の「%」によって前方一致指定で指定できます。半角の「%」は,0文字以上の任意の文字列を示します。
- (例)前方一致指定の例
-
ABC%
上記の指定の場合,ABC,ABCAA,ABCABCなど先頭の3文字がABCの更新情報名が,送信の対象になります。
-
where句を指定すると,指定した条件に一致した更新情報だけを送信できます。where句に指定する内容について説明します。
-
列名
送信対象とする更新データのマッピングキー列を指定します。ただし,選択条件列として指定できるマッピングキー列の属性は,次の表に示す属性に限ります。マッピングキー以外の列,又は次の表の属性以外の列を指定すると,定義エラーになります。
表5‒10 選択条件に指定できるマッピングキー列属性 列属性
長さ,精度
位取り
指定できる長さ
char(n)
n≦255
−
1≦n≦255
mchar(n)
n≦255
−
1≦n≦255
nchar(n)
n≦127
−
1≦n≦127
varchar(n)
n≦255
−
1≦n≦255
mvarchar(n)
n≦255
−
1≦n≦255
nvarchar(n)
n≦127
−
1≦n≦127
[large] decimal(m,n)
1≦m≦38
0≦n≦38
1≦m≦38,m≧n
integer
4バイト
−
4バイト
smallint
2バイト
−
2バイト
-
比較演算子
比較演算子として,次の6種類が指定できます。
=,<>,>,>=,<,<=
-
定数
選択条件で比較する定数を指定します。選択条件に指定できる定数を「表5-11 選択条件に指定できる定数」に,選択条件列の属性と定数との関連を「表5-12 選択条件列属性と定数との関連」に示します。
表5‒12 選択条件列属性と定数との関連 列属性
定 数
文字列定数
真数定数 又は符号なし整数
char(n)
○※1
×
mchar(n)
○※1
×
nchar(n)
○※1
×
varchar(n)
○※2
×
mvarchar(n)
○※2
×
nvarchar(n)
○※2
×
[large] decimal(m,n)
×
○
integer
×
○※3
smallint
×
○※4
- (凡例)
-
○:指定できる定数
×:指定できない定数
- 注※1
-
n<文字列定数長の場合:
定義エラー。
n>文字列定数長の場合:
文字列定数に空白文字を補い,列長と同じ長さに調整後,比較します。文字集合指定がある列の場合は,補う空白文字はその列の文字集合の空白文字となります。文字集合指定がない列の場合は,抽出システム定義のdblocaleオペランドに指定したロケールの空白文字となります。また,ncharの場合は2バイトコードの空白文字を付けます。nchar属性列に対して奇数バイトの文字列定数を指定すると定義エラーになります。
- 注※2
-
n<文字列定数長の場合:
定義エラー。
n>文字列定数長の場合:
文字列定数長の分だけ左側から比較し,結果が等しければさらに文字列長を比較します。
- 注※3
-
−2147483648から2147483647までの整数値だけが指定できます。そのほかは定義エラーになります。
- 注※4
-
−32768から32767までの整数値だけが指定できます。そのほかは定義エラーになります。
-
in(定数〔,定数…〕)
選択条件列データが,右辺で指定した定数のどれかと一致した場合に,真と判定する条件を指定します。この条件で指定できる定数は,最大16個です。指定する定数については,比較演算子の場合に指定する定数の仕様に従います。
-
flike(比較開始位置,定数)
文字列属性の部分一致判定をする条件を指定します。選択条件列データに対して,比較開始位置から始まる文字列が定数と一致した場合に真と判定されます。比較開始位置の指定範囲は0から254までです。指定する定数については,比較演算子の場合に指定する文字列定数の仕様に従います。ただし,比較時に定数に対して空白文字は付けられません。
選択条件列の定義長が(比較開始位置+定数長)よりも短い場合は,定義エラーになります。また,選択条件列が可変長属性の場合,選択条件列の実データ長が(比較開始位置+定数長)よりも短い場合は,偽と判定されます。
-
(3) 注意
-
同一の送信先識別子,更新情報名の送信文を複数指定した場合は,定義エラーになります。
-
抽出文で定義した各更新情報名に対して,少なくとも一つ以上の送信先が対応するように定義してください。送信先が特定できない更新情報が存在する場合は,定義エラーになります。
-
where句に指定できる選択条件の数は,最大256個です。
-
from句で更新情報名を前方一致指定で指定している場合は,where句を指定できません。
-
from句で,同一の抽出対象表より複数の抽出(複数の更新情報名を定義)する更新情報名を指定している場合は,where句は指定できません。
-
where句で,文字集合指定のある列を選択条件にした場合,大小比較の結果は,該当する列の文字集合内での大小関係によって決まります。
-
選択条件列データがnull値の場合は,判定結果は偽になります。
-
send文に指定した更新情報名を定義したextract文でukey句を指定している場合は,更新前データで条件判定します。そのため,送信条件に指定したマッピングキー列に対して送信条件に該当しない値に更新をすると,送信先データが送信対象外のキーに更新されてしまいます。更新されたデータは不当になって,更新後の値に対応する送信先に,あるべきデータが存在しないという矛盾状態になります。
送信条件に指定したマッピングキー列を送信条件の範囲外の値に更新する場合は,単純にUPDATEを実行するのではなく,DELETEとINSERTを実行してデータの存在の整合を取る必要があります。