Problema con campi decimal

Maurizio Plazzer

Problema con campi decimal
Buongiorno a tutti.
Ho riscontrato un problema a cui non so dare una risposta; ho definito una
tabella (PROVADECI) con tre colonne dichiarate nel seguente modo:


CREATE TABLE DB2TSIS.PROVADECI
(C1 SMALLINT
NOT NULL,
C2 DECIMAL (15, 5)
NOT NULL,
C3 DECIMAL (15, 5)
NOT NULL)

Le tre colonne sono state valorizzate nel seguente modo:

C1 = 1080
C2 = 1080,00000
C3 = 2400,00000

La cosa strana è che eseguendo la seguente select:

SELECT C1 / C3, C2 / C3
FROM PROVADECI
;

ottengo il seguente risultato:

COL1 COL2
------------------ ------------------
0.45000 0

Ancora più strano è che utilizzando questa select:

SELECT C2 / DECIMAL (C3, 15, 0)
FROM PROVADECI
;

ottengo

COL1
------------------
0.45000

Io sinceramente non so darmene spiegazione.

P.S. Il tutto gira sotto ZOS con DB2 vers. 7 (installato alla fine di
novembre).
Le query le ho fatte girare sotto QMF vers. 7 release 2


Ciao e grazie in anticipo a tutti

Maurizio Plazzer
Informatica Trentina S.p.A.
Direzione Produzione
Via G. Gilli, 2 - 38100 Trento
Tel. (+39) 0461/800111
Fax. (+39) 0461/800436

_____________________________________________________________
Cap. Soc. Euro 3.100.000,00 - REG. IMP. / C.F. / P.IVA 00990320228
E-mail: [login to unmask email] - www.infotn.it
Società soggetta ad attività di direzione e coordinamento da parte della
Provincia Autonoma di Trento - C.Fisc. 00337460224.

Questo messaggio è indirizzato esclusivamente ai destinatari in
intestazione, può contenere informazioni protette e riservate ai sensi
della normativa vigente e ne è vietato qualsiasi impiego diverso da quello
per cui è stato inviato. Se lo avete ricevuto per errore siete pregati di
eliminarlo in ogni sua parte e di avvisare il mittente
_____________________________________________________________

---------------------------------------------------------------------------------
Benvenuti alla lista DB2 User Group Italia.Per annullare l ' iscrizione collegarsi a : http://www.idugdb2-l.org/archives/DB2-UG-Italy.html. Selezionare "Join or Leave the list". Per consultare le IDUG Listserv FAQ collegarsi a :http://www.idugdb2-l.org. L'amministratore della lista DB2 User Group - Italy può essere raggiunto al seguente indirizzo: [login to unmask email] Per sapere le ultime novità sulle conferenze IDUG potete consultare : http://conferences.idug.org/index.cfm

Moschelli Mauro

Re: Problema con campi decimal
(in response to Maurizio Plazzer)
Le divisioni su operandi decimal producono un risultato il cui datatype è decimal ma scala e precisione sono funzione dei due parametri operandi. Il tutto è spiegato nel manuale SQL Reference al capitolo 2 "Language Elements". Nella mia versione PDF si trova a pagina 116

Table 21. Precision (p) and scale (s) of the result of a decimal division
DEC31 p p' P S
Not in effect ?15 ?15 15 15-(p-s+s')
In effect ?15 ?15 31 N-(p-s+s'), where
N is 30-p' if p' is odd.
N is 29-p' if p' is even.
N/A >15 ?15 31 N-(p-s+s'), where
N is 30-p' if p' is odd.
N is 29-p' if p' is even.
N/A N/A >15 31 15-(p-s+x), where
x is MAX(0,s'-(p'-15))
(See Note 2 below)

Nel tuo caso hai p=15, p'=15, s=5, s'=5. La formula da utilizzare per calcolare la scala è la prima: 15-(15-5+5) = 0, quindi non avrai decimali.

Nella tua seconda prova hai p=15, p'=15, s=5, s'=0 quindi 15-(15-5+0) = 5.

ciao


Mauro Moschelli
SanPaoloIMI S.p.A.

> -----Original Message-----
> From: DB2 User Group - Italy List
> [mailto:[login to unmask email]On
> Behalf Of Maurizio Plazzer
> Sent: Wednesday, February 15, 2006 9:32 AM
> To: [login to unmask email]
> Subject: Problema con campi decimal
>
>
> Buongiorno a tutti.
> Ho riscontrato un problema a cui non so dare una risposta; ho
> definito una
> tabella (PROVADECI) con tre colonne dichiarate nel seguente modo:
>
>
> CREATE TABLE DB2TSIS.PROVADECI
> (C1 SMALLINT
> NOT NULL,
> C2 DECIMAL (15, 5)
> NOT NULL,
> C3 DECIMAL (15, 5)
> NOT NULL)
>
> Le tre colonne sono state valorizzate nel seguente modo:
>
> C1 = 1080
> C2 = 1080,00000
> C3 = 2400,00000
>
> La cosa strana è che eseguendo la seguente select:
>
> SELECT C1 / C3, C2 / C3
> FROM PROVADECI
> ;
>
> ottengo il seguente risultato:
>
> COL1 COL2
> ------------------ ------------------
> 0.45000 0
>
> Ancora più strano è che utilizzando questa select:
>
> SELECT C2 / DECIMAL (C3, 15, 0)
> FROM PROVADECI
> ;
>
> ottengo
>
> COL1
> ------------------
> 0.45000
>
> Io sinceramente non so darmene spiegazione.
>
> P.S. Il tutto gira sotto ZOS con DB2 vers. 7 (installato alla fine di
> novembre).
> Le query le ho fatte girare sotto QMF vers. 7 release 2
>
>
> Ciao e grazie in anticipo a tutti
>
> Maurizio Plazzer
> Informatica Trentina S.p.A.
> Direzione Produzione
> Via G. Gilli, 2 - 38100 Trento
> Tel. (+39) 0461/800111
> Fax. (+39) 0461/800436
>
> _____________________________________________________________
> Cap. Soc. Euro 3.100.000,00 - REG. IMP. / C.F. / P.IVA 00990320228
> E-mail: [login to unmask email] - www.infotn.it
> Società soggetta ad attività di direzione e coordinamento da
> parte della
> Provincia Autonoma di Trento - C.Fisc. 00337460224.
>
> Questo messaggio è indirizzato esclusivamente ai destinatari in
> intestazione, può contenere informazioni protette e riservate ai sensi
> della normativa vigente e ne è vietato qualsiasi impiego
> diverso da quello
> per cui è stato inviato. Se lo avete ricevuto per errore
> siete pregati di
> eliminarlo in ogni sua parte e di avvisare il mittente
> _____________________________________________________________
>
> --------------------------------------------------------------
> -------------------
> Benvenuti alla lista DB2 User Group Italia.Per annullare l '
> iscrizione collegarsi a :
> http://www.idugdb2-l.org/archives/DB2-UG-Italy.html.
> Selezionare "Join or Leave the list". Per consultare le
> IDUG Listserv FAQ collegarsi a :http://www.idugdb2-l.org.
> L'amministratore della lista DB2 User Group - Italy può
> essere raggiunto al seguente indirizzo:
> [login to unmask email] Per sapere le ultime
> novità sulle conferenze IDUG potete consultare :
http://conferences.idug.org/index.cfm


Il contenuto e gli allegati di questo messaggio sono strettamente
confidenziali, e ne sono vietati la diffusione e l'uso non autorizzato.

Le opinioni ivi eventualmente espresse sono quelle dell'autore: di
conseguenza il messaggio non costituisce impegno contrattuale tra
il Gruppo Sanpaolo ed il destinatario, e la banca non assume alcuna
responsabilita' riguardo ai contenuti del testo e dei relativi allegati,
ne' per eventuali intercettazioni, modifiche o danneggiamenti.

Qualora il presente messaggio Le fosse pervenuto per errore, Le saremmo
grati se lo distruggesse e, via e-mail, ce ne comunicasse l' errata
ricezione all'indirizzo [login to unmask email]


This e-mail (and any attachment(s)) is strictly confidential and for use
only by intended recipient(s). Any opinions therein expressed are those
of the author. Therefore its content doesn't represent any commitment
between Sanpaolo Group and the recipient(s) and no liability or
responsibility is accepted by Sanpaolo Group for the above mentioned
content.

Sanpaolo IMI S.p.A. is a Bank authorised by Banca d'Italia; Sanpaolo IMI
S.p.A., London Branch, is regulated by the Financial Services Authority
for the conduct of investment business in the UK.

If you are not an intended recipient(s), please notify
[login to unmask email] promptly and destroy this message.