2015-11-18 2 views
2

Я чувствую, что этот код работает весь день, но внезапно он больше не работает, и я не могу найти решение.Функция PL/SQL перестает работать после цикла

Этот цикл внутри большой функции, поэтому я выложу только это:

FOR i in 0..t_strGroups.count 
LOOP 
    newStudentNumber := newStudentNumber || t_strGroups(i) || ' '; 
    dbms_output.put_line(newStudentNumber); -- this outputs fine 
END LOOP; 
dbms_output.put_line('test'); --this line doesn't output 

При тестировании, где функция перестала работать, я обнаружил, что после этого цикла я больше не могу выходные линии. Кто-нибудь знает, что могло бы произойти здесь?

Заранее благодарен!

+0

цикл находится внутри 'begin'' end;' .. correct? и вы возвращаете значение? – Moudiz

+0

yup, странно, что он работал весь день, я пытаюсь перевернуть коллекцию позже в коде, но он больше не достигает этой части функции. –

+1

Блок PL/SQL не просто прекратит выполнение. Возможно, исключение выбрасывается где-то внутри цикла и поглощается плохо написанным обработчиком исключений, который здесь не показан. Возможно, вы просто не видите последнюю строку, потому что ваш графический интерфейс не захватывает последнюю строку из буфера 'dbms_output'. Возможно, ваш буфер 'dbms_output' просто невелик. –

ответ

2

Подумав об этом немного подробнее, я нашел ответ.

В цикле я петлю от 0 до t_strGroups.count. Поскольку первая позиция моей коллекции равна 0. но collection.count возвращает количество значений в коллекции.

У меня есть 5 значений в моей коллекции, поэтому collection.count возвращает 5. однако последнее значение в моей коллекции имеет позицию 4. Поэтому, когда петли доходят до итерации 5, код сработает. Поскольку положение 5 не существует.

Я думаю, это просто глупо мое, чтобы упустить это. И я подумал об устранении этого вопроса. Но я решил опубликовать этот ответ. Может быть, когда-нибудь он может кому-то помочь!

EDIT: Согласно комментарию Джеффри Кемп код не врезаться это вызывает NO_DATA_FOUND исключение. Поэтому было бы разумно написать для этого обработчик исключений.

+3

Доступ к несуществующему элементу в коллекции не должен «сбой», он должен просто поднять NO_DATA_FOUND. –

+0

@JeffreyKemp спасибо, что дополнение. Я поймаю это исключение. –