Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 index by number  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Народ, подскажите, пожалуйста, как кто решает следующую задачу (вопрос перенесен, как оффтопичный, из темы про "Посмеяться"):

В процессе решения какой-либо задачи нужен массив в памяти, в котором надо постоянно ковыряться, напрашивается ассоциативный массив, но при этом поле(number), по которому напрашивается индекс, размерностью больше, чем разрешено в index by. Как кто поступает?
Я обычно либо допускаю, что не появится никогда число больше 9 знаков(когда это допустимо логикой поля), либо в такой ситуации создаю index by varchar2(n). Минус в том, что постоянно возникают неявные (ну или явные) приведения строки в число и обратно. Ну и медленнее чем binary_integer или pls_integer вероятно. Может есть более лучший выход?
И кстати есть у кого-нибудь объяснения, почему в этом синтаксисе допустимый number ограничен пределами, а строка - нет?... Понятно что binary_integer или pls_integer - быстрее, но раз уж есть такое же со строками...

Демонстрация SQL-ем того, что хочется:
declare
  TYPE t_list IS TABLE OF number index by binary_integer/*хочется, например, поле с размерностью number(15)*/;
  v_list t_list;
begin
  v_list(123456789012345) := null;
end;
28 июн 06, 15:43    [2821840]     Ответить | Цитировать Сообщить модератору
 Re: index by number  [new]
Goldminer
Member

Откуда:
Сообщений: 553
Jannny
И кстати есть у кого-нибудь объяснения, почему в этом синтаксисе допустимый number ограничен пределами, а строка - нет?...
Чего тут объяснять? Число имеет двоичное внутреннее представление определенной длины -- отсюда максимальный размер числа. А строка -- последовательность байтов, ограничение тоже есть, но большое. И разница в эффективности отсюда. ИМХО, проблема принципиальная -- больше, чем влазит в integer, в него не засунешь. Если массив разреженный, можно попытаться хэш-значениями индексировать, но не факт, что эффективней, чем строка, получится (я думаю, Oracle сам внутри что-то подобное использует).
28 июн 06, 16:18    [2822056]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить