MULTIPLY_ALT スカラー関数

MULTIPLY_ALT スカラー関数は、2 つの引数の積を返します。

構文図を読む構文図をスキップするMULTIPLY_ALT(numeric_expression1, numeric_expression2)

スキーマは 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 桁しかサポートしないためです。