Re: Mapping Java BigDecimal

Поиск
Список
Период
Сортировка
От Jakub Bednář
Тема Re: Mapping Java BigDecimal
Дата
Msg-id 4B542257.1040505@b2bcentrum.cz
обсуждение исходный текст
Ответ на Re: Mapping Java BigDecimal  (Craig Ringer <craig@postnewspapers.com.au>)
Список pgsql-jdbc
Craig Ringer wrote:
> Jakub Bednář wrote:
>
>> Hi All,
>>
>> We decide add support PostgreSQL database (now supporting only Oracle
>> database) to our product.
>>
>> In Oracle we mapping Java BigDecimal to number(19, 2), in PostgreSQL to
>> numeric(19, 2).
>>
>> If I store to "BigDecimal column" number without decimal, e.g. "3", than
>> Oracle JDBC driver return "3", but PostgreSQL JDBC driver return "3.00".
>>
>
> You're retrieving a number with two digits of precision, so it's giving
> that to you.
>
>
>> Is there some way (mapping, server setup, jdbc driver setup,...) how
>> reach return number without trailing zeroes on decimal position?
>>
>
> If you map the column in Pg as "numeric" without scale and precision
> then it'll store whatever scale and precision you give it. If you map it
> in Pg with a specified scale and precision, input values will be treated
> as being of that scale and precision. It sounds like Oracle instead
> treats those as *limits* for values and preserves the input scale and
> precision even if they're specified for the column type.
>
> I don't know whether Oracle or Pg are more "correct" here - you're
> giving Pg "3" so arguably it shouldn't assume "3.00" and should in fact
> return "3". OTOH, you've told it what the scale and precision are for
> the column, and inputs to the column should be presumed to fit that
> scale and precision.
>
> You should probably just strip the trailing zeroes for display when you
> format your numbers for the current locale, and retain the internal
> representation however it is. Alternately, store 'numeric' in Pg to
> retain the input scale and precision.
>
> regress=> create table test (x numeric, y numeric(19,2));
> CREATE TABLE
> regress=> insert into test VALUES ('3', '3');
> INSERT 0 1
> regress=> select * from test;
>  x |  y
> ---+------
>  3 | 3.00
> (1 row)
>
>
> ... and if you want, use a CHECK constraint to limit it. You could wrap
> that up in a domain type if you like. I tend to create a domain anyway
> for my NUMERIC types so I don't have to repeat the scale and precision
> all over the place, and so the name of the type more accurately reflects
> its use (eg currency types, etc).
>
> --
> Craig Ringer
>
Thanks Craig.

JB


В списке pgsql-jdbc по дате отправления:

Предыдущее
От: Craig Ringer
Дата:
Сообщение: Re: Mapping Java BigDecimal
Следующее
От: Brad Milne
Дата:
Сообщение: 8.3 build 605 downloads broken?