2016-04-28 6 views
0

Я делаю следующий SQL в DB2V10.Десятичное переполнение в DB2

select 
    SUM (ORD_QTY * IFNULL(SELL_AMT,0) * IFNULL(WGT_QTY,0)) 
    INTO :WS-VAR FROM TABA with ur; 

ORD_QTY => INTEGER 
SELL_AMT => DECIMAL(13,4) 
WGT_QTY => DECIMAL(11,4) 
WS-VAR => PIC S9(13)V9(4) USAGE COMP-3. 

Я получаю ошибку OVERFLOW +802 DECIMAL.

Я не понимаю, почему именно я получаю десятичное переполнение здесь. Может кто-нибудь объяснить мне, пожалуйста!

+1

Вот еще одна ссылка: https://www.ibm.com/support/knowledgecenter/SSEPEK_10.0.0/com.ibm.db2z10.doc.codes/src/tpc/p802.dita. Это очень просто, вы рассчитали число, которое слишком велико. –

ответ

1

Согласно numeric result rules, в результате точность SUM (ORD_QTY * IFNULL(SELL_AMT,0) * IFNULL(WGT_QTY,0)) является DECIMAL(15,4), который может содержать значение до диапазона 10 .

В то же время, фактический результат может быть в диапазоне от 10 до 10 * 10 * 10 , который добавляет до 10 .