Estou tentando atualizar um valor da tabela que é inicialmente definido como 0, estou trabalhando com o DB2. No entanto, quando executo meu SQL, recebo o seguinte erro:
DSNT408I SQLCODE = -406, ERROR: A CALCULATED OR DERIVED NUMERIC VALUE IS NOT
WITHIN THE RANGE OF ITS OBJECT COLUMN
DSNT418I SQLSTATE = 22003 SQLSTATE RETURN CODE
Entendo o que significa o erro, mas não entendo por que estou conseguindo. Aqui está o meu SQL:
UPDATE INTTABLE
SET PAYMENT = DECIMAL((MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)),8,2);
Onde PAYMENT é definido como DECIMAL(8,2)
Alguém poderia me explicar por que a instrução UPDATE acima não funcionará?
Respostas:
1 para resposta № 1Provavelmente, o que está acontecendo é que o cálculo que você está fazendo está em algum lugar obtendo um resultado com mais de 6 dígitos antes da casa decimal.
O DB2 tratará de ter mais números após a casa decimal do que você definiu no SCALE
, mas ocorrerá um erro (com o -406
você está vendo) quando há mais dígitos do que o permitido com o PRECISION
definiram.
Apenas como um aparte, certifique-se de perceber que um DECIMAL(8,2)
fornecerá 6 casas antes do decimal e 2 depois.
Editar: Acho que esta consulta mostrará as linhas ofensivas:
SELECT * FROM (
SELECT
A.*
,(MONTHIRATE*OMA)/(1-POWER(1+MONTHIRATE,-420)) AS CALC
FROM INTTABLE A
) B
WHERE CALC > 999999