Vamos pensar juntos : a tua query está retornando N linhas, com cada linha contendo 5 valores, que são as colunas campo1, campo2, campo3, campo4 e campo5… Vc DISSE PARA O RDBMS onde ele deve guardar cada valor retornando ? Não disse, então ele NÃO SABE o que fazer, onde guardar… Vc tem que ser ** EXPLÍCITO ** aqui, não tem Atalhos, não é assim que o SQL dinâmico foi programado/implementado no RDBMS Oracle…
Outra coisa, vc vai retornar N linhas, então vai ter que ter N cópias das variáveis que vão conter cada valor de cada coluna – isso normalmente implica em se usar um ARRAY, essa é a estrutura na linguagem PL/SQL que pode receber N instâncias de dados…
Vc acha um exemplo funcional em http://ergemp.blogspot.com.br/2014/12/fetching-multiple-rows-with-execute.html , okdoc ??
Não foi a sua pergunta, mas vc Pode também usar REF CURSOR com SQL dinãmico, veja https://community.oracle.com/thread/549904?tstart=0 para uns exemplos…
[]s
Chiappa