java, null и oracle

Shtock
Дата: 24.03.2011 17:05:59
Господа, мне мои коллеги, разрабатывающие клиенскую часть на Java (jdbc) для моей БД просят во всех хранимках, в которых есть int поля на стороне ХП считать, что если они передают -1, то на самом деле это null, потому что для number null в Java якобы не возможен. Таким образом весь код становится с кучей трэша вида

case 
     when nvl(pOutletId, -777) = -1 then to_number(null)
     else pOutletId
end

Соответственно вопрос тем кто пишет на Java - так ли это или нет.
-2-
Дата: 24.03.2011 17:09:22
Shtock,

getBigDecimal
Shtock
Дата: 24.03.2011 17:14:13
т.е. если я им скажу "Эй, а как же getBigDecimal" то они поймут, и мне не надо будет говнокод на плскул плодить? я с жавой как-то вообще никак...
Denis Popov
Дата: 24.03.2011 17:23:22

Hello Shtock. On 24 March 2011 14:05:59 you wrote:

> Господа, мне мои коллеги, разрабатывающие клиенскую часть на Java (jdbc) для моей БД просят во всех хранимках, в которых
> есть int поля на стороне ХП считать, что если они передают -1, то на самом деле это null, потому что для number null в
> Java якобы не возможен.

Просто в Java методы, устанавливающие числовые значения параметров, работают с примитивами, у которых нет значения null.
Для установки null-а есть специальный метод setNull().

Posted via ActualForum NNTP Server 1.4

Shtock
Дата: 24.03.2011 17:31:44
говорят что они её используют где можно, но так как для записи в БД используется object type, то они его делают через stream и там это не пашет. Походу придется говнокодить :(
-2-
Дата: 24.03.2011 17:41:32
BigDecimal позволяет работать стандартно с оракловым NUMBER. Есть еще нестандартный oracle.sql.NUMBER.
Shtock
Дата: 24.03.2011 18:08:38
Утверждается что для формирования через stream object type в оракле стандартные методы java не работают (тут уж мне не проверить). В общем то я уже всё переписал на учет -1 вместо null, но что-то мне кажется это парево.
Denis Popov
Дата: 24.03.2011 18:20:56

Hello Shtock. On 24 March 2011 14:31:44 you wrote:

> говорят что они её используют где можно, но так как для записи в БД используется object type, то они его делают через
> stream и там это не пашет.

А можно посмотреть как?

>Походу придется говнокодить :(

В pl/sql можно объявить переменные по аналогии с параметрами, присвоить им требуемые значения (если -1, то null, иначе
значение) и работать уже с ними. Потом будет легко переделать.

Posted via ActualForum NNTP Server 1.4

Shtock
Дата: 24.03.2011 18:29:01
не очень понял мысли "В pl/sql можно объявить переменные по аналогии с параметрами, присвоить им требуемые значения (если -1, то null, иначе
значение) и работать уже с ними. Потом будет легко переделать.
".

Я просто сделал функцию которая смотрит что пришло: нормальное число, нулл или -1 и если пришло -1, то возвращает null. Ее и воткнул для полей, куда могут попадать null-значения.
Denis Popov
Дата: 24.03.2011 18:34:57
Shtock
Я просто сделал функцию которая смотрит что пришло: нормальное число, нулл или -1 и если пришло -1, то возвращает null. Ее и воткнул для полей, куда могут попадать null-значения.

Примерно так, если правильно понял:
procedure foo(pOutletId number) as 
  vOutletId number := case pOutletId when -1 then null else pOutletId end; - с ней дальше и работаем.
begin
  ...
end;