Возможно ли индексировать коллекцию с индексами больше 3 млрд?
Пример рабочего кода:
declare
type a is table of number index by pls_integer;
b a;
begin
b(1) := 5;
end;
Но тогда нельзя написать b(3000000000), т.к. этот индекс далеко за пределами pls_integer, а нужно использовать больше 2.1 млрд. Можно переделать в index by varchar2, но это повышает время выполнения запросов процентов на 30.
index by number не работает:
declare
type a is table of number index by number;
b a;
begin
b(1) := 5;
end;
Error report -
ORA-06550: line 2, column 13:
PLS-00315: Implementation restriction: unsupported table index type
Есть ли путь использовать числовую индексацию больше 2.1млрд?
Элементов в массиве при этом не так много.
Ответы (1 шт):
Нет, нельзя превысить лимит BINARY_INTEGER|PLS_INTEGER (-2147483648 до 2147483647).
Ркомендуемый обходной путь решения - преобразование в VARCHAR2 с функцией TO_CHAR:
You can populate an element of the associative array with a value of any type that can be converted to VARCHAR2 with the TO_CHAR function
Так будет самое эффективное решение:
declare
type numlist is table of number index by varchar (12);
idx number := 3e9;
nl numlist;
begin
nl(to_char (idx)) := idx;
dbms_output.put_line ('nl('||idx||') = '||nl(to_char (idx)));
end;
/
nl(3000000000) = 3000000000