Вам не нужно выполнять EXECUTE IMMEDIATE в этом контексте.
DECLARE
long_var long:=0;
BEGIN
DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
SELECT filesize INTO long_var FROM files;
DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
END;
/
EXECUTE IMMEDIATE запускает отдельный оператор SQL из вашего кода PL / SQL.Он не может ничего вернуть вашему коду.Используемый вами оператор не является допустимым SQL, поэтому вы получаете ORA-00905.Это действительный код PL / SQL, и он работает так, как и ожидалось после удаления EXECUTE IMMEDIATE.
Редактировать
Код для последующего ответа на вопрос: Для этогос более чем одной строкой вы можете использовать это
DECLARE
CURSOR C1 IS
SELECT filesize FROM files;
BEGIN
FOR files IN c1
LOOP
DBMS_OUTPUT.PUT_LINE(LENGTH(files.filesize));
END LOOP;
END;
/