爲什麼你想要?據推測,如果你在你的光標聲明中選擇3列,你需要的所有三列在你的代碼,所以你需要將所有的三列取成三個獨立的局部變量,即
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;