13.23.1 DECIMAL型の符号正規化機能とは
(1) 符号付きパック形式の符号部の仕様
HiRDBでは符号付きパック形式の符号部の仕様が次の表に示すようになっています。
符号部 |
意味 |
---|---|
X'C' |
正の値を示しています。 |
X'D' |
負の値を示しています。 |
X'F' |
正の値を示しています。 |
(2) 符号付きパック形式の符号部の変換規則
DECIMAL型の符号正規化機能を使用すると,データを入力したときに符号付きパック形式の符号部を次の表に示す規則に従って変換します。この符号部を変換することを符号部を正規化するといいます。符号部を正規化すると+0と−0を同じ値として処理できます。
埋込み変数のデータの符号部 |
正規化しない場合 |
正規化する場合 |
---|---|---|
X'A' |
エラー |
X'C'に変換 |
X'B' |
エラー |
X'D'に変換 |
X'C' |
無変換 |
無変換 |
X'D' |
無変換 |
無変換 |
X'E' |
エラー |
X'C'に変換 |
X'F' |
無変換 |
X'C'に変換 |
X'0'〜X'9' |
エラー |
エラー |
0データの符号部 |
正規化しない場合 |
正規化する場合 |
---|---|---|
X'A' |
エラー |
X'C'に変換 |
X'B' |
エラー |
|
X'C' |
無変換 |
|
X'D' |
無変換 |
|
X'E' |
エラー |
|
X'F' |
無変換 |
(3) 適用基準
符号部に仕様差があるUAPを使用する場合に,DECIMAL型の符号正規化機能を使用するとよいケースがあります。この場合,符号変換規則をよく確認してからDECIMAL型の符号正規化機能を使用してください。
例えば,XDM/RD又はXDM/RD E2のUAPをHiRDBに移行した場合に,DECIMAL型の符号正規化機能を使用するとよいケースがあります。XDM/RDとHiRDBはDECIMAL型の符号部に仕様差があります。
(4) 環境設定
DECIMAL型の符号正規化機能を使用するには,システム共通定義でpd_dec_sign_normalize=Yを指定します。
なるべくHiRDBの新規導入時に指定してください。既にHiRDBを運用しているときに符号部を正規化するには,DECIMAL型を定義した表のデータをデータロードし直す必要があります。
(5) 注意事項
-
正規化されたデータと正規化されていないデータが混在した状態でSQLを実行すると,不当なデータベース破壊を検知したり,実行結果が不正になることがあります。このため,pd_dec_sign_normalizeオペランドの指定値を変更した場合,データベース再編成ユティリティ(pdrorgコマンド)及びデータベース作成ユティリティ(pdloadコマンド)を使用し,データロードをし直して正規化状態を統一する必要があります。方法については,「既存のデータを正規化する方法」を参照してください。
-
DECIMAL型の符号正規化機能を使用する場合の注意事項を次に示します。
-
ハッシュ分割した表に対して,表分割ハッシュ関数を使用したUAPで格納先RDエリアを求める場合は,表分割ハッシュ関数の引数に「DECIMAL型の符号正規化機能あり」を指定してください。指定しないと表分割ハッシュ関数の結果が不正になることがあります。
-
キーレンジ分割(分割キーがDECIMAL型のデータの場合)した表に対して,UAPでキーレンジ分割処理をしている場合は,分割キー値をDECIMAL型符号正規化関数で変換してください。変換しないとキーレンジ分割の結果が不正になることがあります。
表分割ハッシュ関数,及びDECIMAL型符号正規化関数については,マニュアル「HiRDB UAP開発ガイド」を参照してください。
-