第3章 PowerRDBconnectorの使用手引き
3.7 データ補正機能
3.7.2 項目属性に違反するデータのチェックと補正
3.7.2.2 データ補正
以下のような場合には、データ内容と属性が矛盾することがあります。
● あるレコード内の同じ位置のデータに対して、複数の属性で再定義した場合。
● 複数のアプリケーションから異なった属性で定義した場合
COBOLアプリケーションの数が多い、または影響する部分がどこかわからないなど、データ内容 に応じた正しい属性で定義しなおすことができないときがあります。
この場合、データ補正を行うことで、COBOLアプリケーションの対応を少なくすることができま す。
DataCheckプロパティに項目種類を指定しない場合、指定した属性のデータチェックを行わず、
COBOLアプリケーションからデータベースへデータを渡すとき(REWRITE文、WRITE文およびキー 指定時)、以下のように補正が行われます。
a. 英数字項目と日本語項目
DataCheckプロパティに”C”を指定しない場合、以下のように補正が行われます。
● 項目データが全て0x00となっている場合、半角空白(0x20)に置き換えて正常なデータ として扱います。
表3.30 文字データの補正
列名 COBOL文字コード指定 0x00と置き換える文字コード
̲CHAR unicode 半角空白(0x20)
注意
データの途中に0x00が存在する場合、エラーとならず、そのままデータベースにデータを 渡します。このため、コード系と0x00の位置によって以下のように動作します。
● コード系がSJISの場合、0x00以降のデータが欠如します。
● コード系がunicodeで、以下の条件の場合、0x00以降のデータが欠如します。
z 列名が̲CHARの場合
̶ 0x0000 以降が欠如します。
̶ 0x00nn の下位バイト以降が欠如します。
̶ 0xnn00 以降が欠如します。
(nn:任意の16進数) z 列名が̲NCHARの場合
̶ 0x0000 以降が欠如します。
なお、0x00nnや0xnn00のデータがあっても、データの欠如は発生しません。
(nn:任意の16進数)
b. 外部十進項目
DataCheckプロパティに”U”を指定しない場合、以下のように補正が行われます。
● HIGH-VALUE、LOW-VALUE、全てが半角空白の場合は数値の0として扱います。
● 項目定義の符号属性とデータの符号に不一致があった場合、正の値として扱います。
● 符号部に異常があった場合、正の値として扱います。
● ゾーン部に異常があった場合、ゾーン部を補正し正常なデータとして扱います。
表3.31 外部十進のデータ補正 列情報 データ内容 COBOLのデー
タ定義例 補正内容 備考
符号部が0x3*
(符号なしデータ) PIC 9(n) 正常 符号部が0x5*
(符号ありの負の値) PIC S9(n) 符号なしの正の値に補 正します。
̲UNSIGNあり
符号部が0x4*
(符号ありの正の値) PIC S9(n) 符号なしの正の値に補 正します。
符号部が0x3*
PIC 9(n) 正の値に補正します。
(符号なしデータ)
符号部が0x5*
(符号ありの負の値) PIC S9(n) 正常
̲UNSIGNなし
符号部が0x4*
(符号ありの正の値) PIC S9(n) 正常
* は 0
〜9 n は 整 数
全て半角空白 数値の0に置換します。
LOW-VALUE 数値の0に置換します。
HIGH-VALUE
(キー値の指定時)
数値の0に置換します。
HIGH-VALUE
(書込み時)
エラーとなります。
0x00または0x20を含み ます。
異常部分を数値の0に置 換します。注1
̲UNSIGNあり
̲UNSIGNなし
ゾーン部が不正 ゾーン部に0x3*を設定 します。
* は 0
〜9
数字部が異常 エラーとなります。
注1)最終バイトが0x00、 0x20の場合、符号無の場合は 0x30、符号付の場合は0x40として 置換します。
例)
● 前方に空白ありの場合 ʼ 123ʼ ⇒ ʻ00123ʼとして扱います
● 後方に空白ありの場合 ʼ123 ʼ ⇒ ʻ12300ʼとして扱います
● 混在した場合 ʼ1 2 3ʼ ⇒ ʻ10203ʼとして扱います
c. 内部十進項目
DataCheckプロパティに”P”を指定しない場合、以下のように補正が行われます。
● 符号部に異常なデータがあった場合、正の値として扱います。
注意
数字部に異常があった場合、データ補正ができないため、データベースアクセス時にエラ ーとなります。
表3.32 内部十進のデータ補正 列情報 データ内容 COBOL の デ ー タ
定義例 補正内容 備考
符号部が0x*F
(符号なしデータ) PIC 9(n) COMP 正常 *は0〜9 nは整数 符号部が0x*D
(符号ありの負の値) PIC S9(n) COMP 正の値に補正します。
̲UNSIGNあり
符号部が0x*C
(符号ありの正の値) PIC S9(n) COMP 正の値に補正します。
符号部が0x*F
PIC 9(n) COMP 正の値に補正します。
(符号なしデータ)
符号部が0x*D
(符号ありの負の値) PIC S9(n) COMP 正常
̲UNSIGNなし
符号部が0x*C
PIC S9(n) COMP 正常
(符号ありの正の値)
̲UNSIGNあり
数字部が0〜9以外 エラー
̲UNSIGNなし