Ошибка хранения PL / SQL в запросе выбора - PullRequest
1 голос
/ 15 ноября 2011

У меня следующее определение курсора

cMultiplier     NUMBER := 100000000000000000 ;
CURSOR CR_TABLE1 IS 
SELECT to_char((COL_ID * cMultiplier) + SEQ,'0999999999999999999') "NEW_COL" 
FROM TABLE1;

Затем этот курсор выбирается как

FETCH CR_TABLE1 
BULK COLLECT INTO AR_TABLE1 LIMIT I_BULK_LIMIT;
EXIT WHEN AR_TABLE1.COUNT = 0;

Где AR_TABLE1 имеет тип

TYPE T_TABLE1 IS TABLE OF CR_TABLE1%ROWTYPE;
AR_TABLE1 T_TABLE1;

Тестовые значения для COL_ID - это 1 для всех случаев, а тестовые значения для SEQ - 1234567654322 (13-значное число). Это значение вставляется по длине 19 в другую таблицу типа VARCHAR.

Проблема в том, что как только курсор доходит до FETCH, он выдает исключение, указывающее ORA-06500: PL/SQL: storage error

Я знаю, что это должно что-то делать с оператором select, но я конвертирую его в строку (varchar). Почему я сталкиваюсь с этой проблемой?

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

Какое значение вы присваиваете I_BULK_LIMIT?

Ошибка PLS-06500 часто означает, что приложению не хватает памяти. Поэтому вам нужно посмотреть на переменные, которые вы назначаете в своей программе. Но память, используемая массивом, является наиболее вероятным виновником. Если в настоящее время установлен предел более нескольких тысяч, вам следует рассмотреть возможность установки нижнего предела.

1 голос
/ 15 ноября 2011

Проблема в вашей маске, оракул добавляет начальный пробел для положительных чисел или "-" для отрицательных чисел, поэтому результирующая строка будет состоять из 20 символов.Добавьте FM к формату (как это: FM0999999999999999999).Таким образом, Oracle будет подавлять лидирующие позиции.

...