Зачем вам это нужно?Предположительно, если вы выбираете три столбца в объявлении курсора, вам нужны все три столбца в коде, поэтому вам нужно будет извлечь все три столбца в три отдельные локальные переменные, то есть
DECLARE
x integer;
y integer;
z integer;
CURSOR c1
IS SELECT column1, column2, column3
FROM some_table;
BEGIN
OPEN c1;
LOOP
FETCH c1
INTO x, y, z;
EXIT WHEN c1%NOTFOUND;
END LOOP;
CLOSE c1;
END;
В качестве альтернативы выможет объявить тип записи на основе объявления курсора и извлечь его
DECLARE
CURSOR c1
IS SELECT column1, column2, column3
FROM some_table;
c1_rec c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1
INTO c1_rec;
dbms_output.put_line( c1_rec.column2 );
EXIT WHEN c1%NOTFOUND;
END LOOP;
CLOSE c1;
END;
. Вы также можете полностью избавиться от явного цикла, который обычно является предпочтительным подходом, поскольку вам не нужно беспокоиться о утечках из курсора.и (в современных версиях) Oracle может автоматически выполнять для вас массовые сборы
DECLARE
CURSOR c1
IS SELECT column1, column2, column3
FROM some_table;
BEGIN
FOR c1_rec IN c1
LOOP
dbms_output.put_line( c1_rec.column2 );
END LOOP;
END;