Você não pode criar um
%ROWTYPE variável para uma tabela desconhecida e você não pode se referir estaticamente aos nomes das colunas quando não sabe o nome da tabela em tempo de compilação. Você pode usar o pacote dbms_sql para lidar com instruções SQL completamente dinâmicas. Você precisará preparar a instrução SQL, descrever as colunas para descobrir o número de colunas e seus tipos de dados, vincular variáveis apropriadas e buscar os dados. É uma maneira muito mais complicada de escrever código do que o exemplo que você postou, mas oferece extrema flexibilidade.
Há vários exemplos de uso do pacote dbms_sql na documentação que vinculei. Você também pode verificar a função dump_csv de Tom Kyte que grava o resultado de uma consulta arbitrária em um arquivo CSV usando
UTL_FILE . Se você realmente deseja gravar os dados em DBMS_OUTPUT , você pode simplesmente substituir o UTL_FILE chamadas com DBMS_OUTPUT . Mas tenho certeza de que você deseja fazer algo mais útil do que apenas gravar os dados no DBMS_OUTPUT buffer para que o procedimento de Tom esteja provavelmente mais próximo do que você realmente está tentando realizar.