Вы не можете использовать эту конструкцию:
for item in c_items loop
с REF CURSOR. Ожидается, что c_items
будет стандартным PL / SQL CURSOR
. Это непосредственная причина ошибки, которую вы получаете. Если вы хотите зациклить REF CURSOR, насколько я знаю, вам нужно использовать явные операторы FETCH и обрабатывать условие цикла самостоятельно.
Кроме того, то, что вы говорите, что пытаетесь сделать, не совсем имеет смысла. Если вы извлекаете курсор из курсора c_items
в теле процедуры, возвращая его и вызывающей стороне, может привести к путанице. В своем комментарии вы используете фразу «выбрать в курсор», что подразумевает, что, возможно, вы думаете о курсоре как о статической коллекции, которую вы можете многократно повторять. Это не так - курсор представляет активный запрос в памяти. Как только строка извлекается из курсора, она не может быть получена снова.
Я не уверен, что именно предложить, поскольку я не понимаю конечной цели кода. Если вам действительно нужно обрабатывать строки из c_items
и возвращать их как используемый REF CURSOR, тогда единственный вариант - закрыть и снова открыть его.