Ни одно из предложенных решений не работает для отображения оригинальных имен столбцов, поэтому я не уверен, почему люди голосуют за них ... У меня есть "хак", который работает для исходного запроса, но я действительно не это нравится ... То есть вы фактически добавляете или добавляете префикс к запросу для каждого столбца, чтобы они всегда были достаточно длинными для заголовка столбца. Если вы находитесь в режиме HTML, как это показано на постере, небольшой лишний интервал наносит небольшой вред ... Конечно, это замедлит ваш запрос abit ...
, например
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;
Конечно, вы могли бы написать хранимую процедуру, чтобы сделать что-то лучше, но на самом деле это кажется излишним для этого простого сценария.
Это также не соответствует первоначальному запросу постеров. В том, что это требует, вручную перечисляя по столбцам и не используя select *. Но, по крайней мере, это решение работает, когда вы готовы детализировать поля.
Однако, поскольку на самом деле нет проблем с наличием слишком длинных полей в HTML, существует довольно простой способ исправить решение Криса, чтобы оно работало в этом примере. То есть просто выберите максимальное значение, которое позволит оракул. К сожалению, это все равно не будет работать для КАЖДОГО поля каждой таблицы, если вы явно не добавите форматирование для каждого типа данных. Это решение также не будет работать для объединений, поскольку разные таблицы могут использовать одно и то же имя столбца, но разные типы данных.
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;