Los cursores PL/SQL no pueden funcionar con columnas que no se conocen en tiempo de compilación.
La única forma de trabajar con consultas totalmente dinámicas en PL/SQL es mediante el uso del paquete PL/SQL DBMS_SQL
.
Actualización:
Oracle tiene una descripción completa de DBMS_SQL paquete con muchos ejemplos.