Os cursores PL/SQL não podem trabalhar com colunas que não são conhecidas em tempo de compilação.
A única maneira de trabalhar com consultas totalmente dinâmicas em PL/SQL é usando o pacote PL/SQL
DBMS_SQL
. Atualização:
A Oracle tem uma descrição abrangente do DBMS_SQL pacote com muitos exemplos.