7.26.3 除算結果のデータ型がDECIMAL型の場合の留意事項
除算結果のデータ型がDECIMAL型の場合,除算結果の位取りは,サーバ定義またはクライアント定義のadb_sql_prep_dec_div_rs_priorオペランドの指定値によって決まります。
- 〈この項の構成〉
(1) 実表を検索する場合
次に示す内容の実表T1を検索する場合,adb_sql_prep_dec_div_rs_priorオペランドの指定値によって実行結果が変わります。
実行するSELECT文
SELECT "C1"/"C2" AS "除算結果" FROM "T1"
-
adb_sql_prep_dec_div_rs_priorオペランドにINTEGRAL_PART(省略値)を指定した場合
"C1"/"C2"の除算結果のデータ型は,整数部を優先してDECIMAL(38,0)になります。
除算結果
584.
-
adb_sql_prep_dec_div_rs_priorオペランドにFRACTIONAL_PARTを指定した場合
"C1"/"C2"の除算結果のデータ型は,第1演算項の位取りを優先してDECIMAL(38,4)になります。
除算結果
584.4457
(2) ビュー表を検索する場合
CREATE VIEW文の問合せ式本体に指定された除算(四則演算)の結果のデータ型がDECIMAL型の場合,その精度と位取りは,サーバ定義またはクライアント定義のadb_sql_prep_dec_div_rs_priorオペランドの指定値(ビュー表を検索したときの指定値)によって決まります。
- (例)
-
表T1の内容は次のとおりとします。
ビュー表の定義
CREATE VIEW "VT1"("VC1") AS SELECT "C1"/"C2" FROM "T1"
-
adb_sql_prep_dec_div_rs_priorオペランドにINTEGRAL_PARTを指定して,次のSELECT文を実行した場合
SELECT "VC1" FROM "VT1"
検索結果
20
このとき,ビュー表VT1のVC1列のデータ型はDECIMAL(38,0)になります。
-
adb_sql_prep_dec_div_rs_priorオペランドにFRACTIONAL_PARTを指定して,次のSELECT文を実行した場合
SELECT "VC1" FROM "VT1"
検索結果
20.2
このとき,ビュー表VT1のVC1列のデータ型はDECIMAL(38,1)になります。
- メモ
-
SQL_COLUMNS表に格納されているビュー表の列情報には,adb_sql_prep_dec_div_rs_priorオペランドの指定値(ビュー表を定義したときの指定値)によって決定されたデータ型が格納されます。そのため,ビュー表の定義時とビュー表の検索時で,adb_sql_prep_dec_div_rs_priorオペランドの指定値が異なると,次の2つのデータ型が不一致になることがあります。
-
ビュー表を等価変換した内部導出表の導出列のデータ型
-
SQL_COLUMNS表に格納されているビュー表の列のデータ型
なお,除算の第1演算項および第2演算項が定数の場合,除算結果の精度と位取りは,ビュー表を定義したときのadb_sql_prep_dec_div_rs_priorオペランドの指定値によって決定されます。
-