Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как автоматически wrap-ить большие числа (например для байта из 130 в -126)  [new]
Torque
Member

Откуда:
Сообщений: 141
Требуется реализовать обычное переполнение разрядной сетки.

Вот пример:
DECLARE
  v_Temp NUMBER(19,0); -- тут вообще должен быть 64-битный Integer
BEGIN
  v_Temp := TO_NUMBER('7FFFFFFFFFFFFFFF', 'XXXXXXXXXXXXXXXX'); -- нормально, влезет
  v_Temp := TO_NUMBER('8FFFFFFFFFFFFFFF', 'XXXXXXXXXXXXXXXX'); -- ORA-06502: PL/SQL: numeric or value error: number precision too large
  v_Temp := CAST(TO_NUMBER('8FFFFFFFFFFFFFFF', 'XXXXXXXXXXXXXXXX') AS NUMBER(19,0)); -- так вообще синтаксическую ошибку выдает
  v_Temp := CAST(TO_NUMBER('8FFFFFFFFFFFFFFF', 'XXXXXXXXXXXXXXXX') AS NUMBER); -- тоже хрень
END;


а нужно просто чтобы в v_Temp было число = -8070450532247928833!

Число - 64-битное, целое со знаком (эквивалент long в Java).
В Oracle вообще есть что-то подобное (а не эти NUMBER(X,Z))?
28 май 12, 14:40    [12626040]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматически wrap-ить большие числа (например для байта из 130 в -126)  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Torque,

declare
  v_temp number;
begin
  v_temp := 130;
  dbms_output.put_line(v_temp);
  if v_temp >= to_number('7f' ,'xx') then
     v_temp :=-to_number('ff' ,'xx')-1+v_temp;
  end if;
  dbms_output.put_line(v_temp);
end;
28 май 12, 15:23    [12626414]     Ответить | Цитировать Сообщить модератору
 Re: Как автоматически wrap-ить большие числа (например для байта из 130 в -126)  [new]
-2-
Member

Откуда:
Сообщений: 15330
Torque
Число - 64-битное, целое со знаком (эквивалент long в Java).
В Oracle вообще есть что-то подобное (а не эти NUMBER(X,Z))?
нет. и поэтому не стоит заниматься на стороне сервера обработкой особенностей конкретного клиента. чревато проблемами.
28 май 12, 15:35    [12626514]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить