Como são colunas diferentes, você deve mencioná-las explicitamente separadamente na lista SELECT. Você não pode fazer isso dinamicamente em SQL puro .
Sugiro usar um bom editor de texto , dificilmente levaria um minuto ou dois para escrever todo o SQL.
Você pode usar DECODE que terá menos sintaxe em vez de CASE expressão que é verbosa.
Por exemplo,
DECODE(ONE, 1, 1, 0) AS col1,
DECODE(JUST_ONE, 1, 1, 0) AS col2,
DECODE(ANOTHER_ONE, 1, 1, 0) AS col3,
DECODE(TWO, 1, 1, 0) AS col4,
DECODE(JUST_TWO, 1, 1, 0) AS col5,
DECODE(ANOTHER_TWO, 1, 1, 0) as col6
Eu sugiro manter o SQL , e não use PL/SQL . Não são iguais, são motores diferentes.
PL --> Procedural Language
. Mas se você insistir, pode usar um cursor para loop para percorrer todas as colunas em [DBA|ALL|USER]_TAB_COLS . Você pode usar um SYS_REFCURSOR para ver os dados. Primeiro você terá que construir o SQL dinâmico .