MULTIPLY_ALT スカラー関数
MULTIPLY_ALT スカラー関数は、2 つの引数の積を返します。
スキーマは SYSIBM です。
- numeric_expression1
- 組み込み数値データ・タイプの値を戻す式。
- numeric_expression2
- 組み込み数値データ・タイプの値を戻す式。
MULTIPLY_ALT 関数は、乗算の演算子の代わりとして用意されています (特に、引数の 10 進数の精度の合計が 31 を超える場合のため)。
両方の引数が完全な数値データ・タイプ (DECIMAL、BIGINT、INTEGER、または SMALLINT) の場合、関数の結果は DECIMAL になります。それ以外の場合は、10 進浮動小数点演算を使用して操作が実行され、関数の結果は 10 進浮動小数点になり、その精度は引数のデータ・タイプによって、10 進浮動小数点演算の精度の判別方法と同じ方法で判別されます。浮動小数点またはストリング引数は、関数を評価する前に DECFLOAT(34) にキャストされます。
関数の結果が DECIMAL の場合、結果の精度と位取りは、以下のように決定されます。記号 p および s を使用して最初の引数の精度と位取りを、記号 p' および s' を使用して 2 番目の引数の精度と位取りを指定します。
- 精度は MIN(31, p + p')
- 位取りは:
- 両方の引数が 0 の場合は 0
- p + p' が 31 以下であれば MIN(31, s + s')
- p + p' が 31 より大きい場合は MAX(MIN(3, s + s'), 31 - (p - s + p' - s'))
少なくとも 1 つの引数が NULL になる可能性があるか、 またはデータベース構成パラメーターで dft_sqlmathwarn が YES に設定されている場合には、 結果は NULL になる可能性があります。 引数の 1 つが NULL の場合、結果は NULL 値になります。
少なくとも 3 の位取りが必要で、精度の合計が 31 を超えるような 10 進数の計算を実行するときには、 乗算演算子ではなく MULTIPLY_ALT 関数の使用が推奨されます。 このような場合、内部計算が実行されるため、オーバーフローが回避されます。 最終結果は、位取りを合わせるために必要に応じて切り捨てを使用して、 結果データ・タイプに割り当てられます。 最終結果のオーバーフローは、位取りが 3 のときはまだ起こり得ることに注意してください。
以下の表は、MULTIPLY_ALT と乗算演算子を使用した結果タイプの比較の例です。
| 引数タイプ 1 | 引数タイプ 2 | MULTIPLY_ALT を使用した結果 | 乗算演算子を使用した結果 |
|---|---|---|---|
| DECIMAL(31,3) | DECIMAL(15,8) | DECIMAL(31,3) | DECIMAL(31,11) |
| DECIMAL(26,23) | DECIMAL(10,1) | DECIMAL(31,19) | DECIMAL(31,24) |
| DECIMAL(18,17) | DECIMAL(20,19) | DECIMAL(31,29) | DECIMAL(31,31) |
| DECIMAL(16,3) | DECIMAL(17,8) | DECIMAL(31,9) | DECIMAL(31,11) |
| DECIMAL(26,5) | DECIMAL(11,0) | DECIMAL(31,3) | DECIMAL(31,5) |
| DECIMAL(21,1) | DECIMAL(15,1) | DECIMAL(31,2) | DECIMAL(31,2) |
例
最初の引数のデータ・タイプが DECIMAL(26,3)、
2 番目の引数のデータ・タイプが DECIMAL(9,8) の 2 つの値を乗算します。
結果の
データ・タイプは DECIMAL(31,7) です。
values multiply_alt(98765432109876543210987.654,5.43210987)
1
---------------------------------
536504678578875294857887.5277415 これら 2 つの数値の積の全体は 536504678578875294857887.52774154498 ですが、
最後の 4 桁は、結果のデータ・タイプの位取りに一致させるために切り捨てられます。 同じ値を使って乗算演算子を使用すると、算術オーバーフローが発生します。
これは、結果のデータ・タイプが DECIMAL(31,11) で、
結果の値の小数点の左側が 24 桁になるものの、
結果のデータ・タイプが 20 桁しかサポートしないためです。
