Para una solución MySQL, podría usar UNION
para establecer los nombres de todas las columnas en un término de consulta de fila cero y luego consultar algo más complejo:
SELECT null AS a, null AS b, null AS c FROM dual WHERE false
UNION ALL
SELECT <expr>, <expr>, <expr>
FROM <realtable>...
Solo el primer término de consulta de UNION define los nombres de columna de toda la consulta. Los nombres de las columnas (o la falta de ellos) en los términos de consulta subsiguientes no afectan los nombres de las columnas finales.
Necesita saber el número de columnas, pero debería ser bastante fácil mantener los dos términos de consulta separados. Hasta donde yo sé, funciona tanto en Oracle como en MySQL (sin embargo, solo lo he probado en MySQL, no en Oracle).