Jus*_*ave 13
你为什么想要?据推测,如果您在游标声明中选择了三列,则需要在代码中使用所有三列,因此您需要将所有三列提取到三个单独的局部变量中,即
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;
Run Code Online (Sandbox Code Playgroud)
或者,您可以根据游标声明声明一个记录类型并获取它
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;
Run Code Online (Sandbox Code Playgroud)
您也可以摆脱完全明确的循环通常是因为你不必担心光标泄漏和首选的方法(在现代版本)的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;
Run Code Online (Sandbox Code Playgroud)