El resultado de un SELECT dentro de un bloque PL/SQL siempre tiene que almacenarse dentro de una variable, que puede ser de tipo simple (varchar, number, etc), de tipo colección (arrays, tables, etc) o de tipo puntero (cursor), por ejemplo:
1. Tipo Simple, el select solo puede devolver un registro que se almacena en la variable var_equip y se produce un error si devuelve más de uno o ninguno.
Código:
declare
var_equip msf600.equip%type;
begin
select msf600.equip into var_equip
from msf600
where id_msf600 = 1;
dbms_output.put_line( var_equip );
end;
2. Tipo Colección, el select puede devolver ninguno, uno o varios registros que se almacenan simultáneamente en la variable var_equip.
Código:
declare
type t_equip is table of msf600.equip%type index by pls_integer;
var_equip t_equip;
begin
select msf600.equip bulk collect into var_equip
from msf600;
forall i in var_equip.first .. var_equip.last
dbms_output.put_line( var_equip(i) );
end;
3. Tipo Puntero, el select puede devolver ninguno, uno o varios registros, pero la variable var_equip solo puede almacenar uno por vez, el resto se los referencia a la tabla con un puntero (también puedes combinar los cursores con las colecciones).
Código:
declare
cursor c_equip is select msf600.equip from msf600;
var_equip msf600.equip%type;
begin
open c_equip;
loop
fetch c_equip into var_equip;
exit when c_equip%notfound;
dbms_output.put_line( var_equip );
end loop;
end;
--o bien, un código más simple
begin
for c_equip in ( select msf600.equip from msf600 ) loop
dbms_output.put_line( c_equip.equip);
end loop;
end;
Saludos