Это означает, что вы пытаетесь манипулировать тем, что имеет ссылку, но еще не инициализировано. Первое, что нужно сделать, это проверить каждый созданный экземпляр. Используйте контрольные точки, часы, проверяйте свои значения varibale. Следить за трассировкой стека и искать точные строки и столбцы, которые создают проблему
PL / SQL не поставляется со встроенным токенизатором. Тем не менее, относительно просто построить SQL или PL / SQL. Веб-сайт Адриана Биллингтона имеет несколько решений . Кроме того, если вы находитесь на 10g, вы можете использовать этот код от Tanel Poder , который делает это в SQL с помощью regex.
По общему признанию, было бы проще, если бы Oracle просто включил dang как один из их встроенных модулей.
PL / SQL включает базовый для списков, разделенных запятыми (DBMS_UTILITY.COMMA_TO_TABLE
).
Пример:
DECLARE
lv_tab_length BINARY_INTEGER;
lt_array DBMS_UTILITY.lname_array;
BEGIN
DBMS_UTILITY.COMMA_TO_TABLE( list => 'one,two,three,four'
, tablen => lv_tab_length
, tab => lt_array
);
DBMS_OUTPUT.PUT_LINE( 'lv_tab_length = ['||lv_tab_length||']' );
FOR i IN 1..lv_tab_length
LOOP
DBMS_OUTPUT.PUT_LINE( '['||lt_array( i )||']' );
END LOOP;
END;
/
Или см. ссылку Ask Tom для других идей. ..
Альтернативой является запись Java-хранимой процедуры (внутри базы данных есть JVM), это означает, что вы можете использовать java.util.StringTokenizer. Вы должны перенести хранимый в Java процесс внутри процедуры / функции PL / SQL.
Здесь для примера: http://forums.oracle.com/forums/thread.jspa?messageID=2575374�
Печально Я не понимаю проверенные исключения Java, поэтому обработка исключений не очень велика (я не Java-разработчик).
, если у вас установлен APEX, функция APEX_UTIL.string_to_table
делает именно это.