Ninguna de las soluciones propuestas funciona para mostrar los nombres de las columnas originales, así que no estoy seguro de por qué las personas las votan ... Tengo un "truco" que funciona para la solicitud original, pero realmente no me gusta 'Me gusta ... Es que realmente añades o prefijas una cadena a la consulta para cada columna, por lo que siempre son lo suficientemente largas para el encabezado de la columna. Si está en modo HTML, como en el póster, hay poco daño con un poco de espaciado blanco adicional ... Por supuesto, ralentizará su consulta ...
p.
SET ECHO OFF
SET PAGESIZE 32766
SET LINESIZE 32766
SET NUMW 20
SET VERIFY OFF
SET TERM OFF
SET UNDERLINE OFF
SET MARKUP HTML ON
SET PREFORMAT ON
SET WORD_WRAP ON
SET WRAP ON
SET ENTMAP ON
spool '/tmp/Example.html'
select
(s.ID||' ') AS ID,
(s.ORDER_ID||' ') AS ORDER_ID,
(s.ORDER_NUMBER||' ') AS ORDER_NUMBER,
(s.CONTRACT_ID||' ') AS CONTRACT_ID,
(s.CONTRACT_NUMBER||' ') AS CONTRACT_NUMBER,
(s.CONTRACT_START_DATE||' ') AS CONTRACT_START_DATE,
(s.CONTRACT_END_DATE||' ') AS CONTRACT_END_DATE,
(s.CURRENCY_ISO_CODE||' ') AS CURRENCY_ISO_CODE,
from Example s
order by s.order_number, s.contract_number;
spool off;
Por supuesto que podría escribir un procedimiento almacenado para hacer algo mejor, pero realmente lo que parece ser una exageración para este escenario simple.
Esto todavía no cumple con la solicitud original de los carteles. En eso requiere listado manual en las columnas y no usar select *. Pero al menos es una solución que funciona cuando estás dispuesto a detallar los campos.
Sin embargo, como realmente no hay problema para tener demasiados campos en HTML, hay una manera bastante simple de solucionar la solución de Chris para que funcione en este ejemplo. Eso es solo elegir el valor máximo que el oráculo permitirá. Lamentablemente, esto aún no funcionará para CADA campo de cada tabla, a menos que agregue explícitamente el formato para cada tipo de datos. Esta solución tampoco funcionará para combinaciones, ya que diferentes tablas pueden usar el mismo nombre de columna pero un tipo de datos diferente.
SET ECHO OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET PAGESIZE 32766
SET LINESIZE 32766
SET MARKUP HTML OFF
SET HEADING OFF
spool /tmp/columns_EXAMPLE.sql
select 'column ' || column_name || ' format A32766'
from all_tab_cols
where data_type = 'VARCHAR2' and table_name = 'EXAMPLE'
/
spool off
SET HEADING ON
SET NUMW 40
SET VERIFY OFF
SET TERM OFF
SET UNDERLINE OFF
SET MARKUP HTML ON
SET PREFORMAT ON
SET WORD_WRAP ON
SET WRAP ON
SET ENTMAP ON
@/tmp/columns_EXAMPLE.sql
spool '/tmp/Example.html'
select *
from Example s
order by s.order_number, s.contract_number;
spool off;
Gracias por el código python, lamentablemente nuestro cliente prohíbe estrictamente la instalación de cualquier otro software en su entorno de producción. Ni siquiera grep o cola. Ugh. Entonces es sqlplus o fracaso. –
Se encontró que esto fue útil por razones completamente no relacionadas. ¡Me alegra que lo hayas publicado! :-D –