/ / DB2 SQL Atualizando um valor da tabela - sql, db2, sql-update

DB2 SQL Atualizando um valor da tabela - sql, db2, sql-update

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 № 1

Provavelmente, 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