Cuando escriba select * from some_table; en SQL*Plus, SQL*Plus actúa como el programa cliente y hace mucho trabajo por usted, encubierto, en términos de los datos que se devuelven desde la base de datos, formateándolos y mostrándolos.
Tan pronto como escribas DECLARE , comienza un bloque PL/SQL. Ahora, estás llamando a PL/SQL y PL/SQL está llamando a SQL. Como resultado, debe decidir cómo manejar los datos que devuelve el SQL, en PL/SQL. La forma de hacerlo es a través de un INTO cláusula y una variable para recibir la salida. Teniendo en cuenta eso, ¿dónde estarían los datos de salida de SELECT vaya, si no proporciona un INTO ¿cláusula? Tiene que ir a alguna parte, ¿verdad?
Espero que quede claro.