Вы можете использовать переменную подстановки и синтаксис SQL * Plus column ... new_value ...
, чтобы определить ее значение из запроса:
column col_width new_value col_width noprint
select greatest(nvl(max(length(head_results)), 0), length('head_results')) as col_width
from your_table;
column head_results format "a&col_width"
Запрос:
- находит самое длинное значение в таблице с
max(length(head_results))
;
- по умолчанию это ноль, если есть только нули (или нет данных) с
nvl(..., 0)
;
- находит большее из этого значения и фиксированной строки с помощью
greatest(..., length('head_results'))
, хотя вы можете использовать фиксированное значение 12, если хотите,
- и дает результат этого выражения псевдоним
col_width
.
Тогда column col_width new_value col_width noprint
позволяет использовать col_width
в качестве переменной подстановки, которая наследует значение из запроса.
Затем column head_results format "a&col_width"
устанавливает ширину столбца на количество символов, возвращаемых запросом, используя эту переменную подстановки - a&col_width
переводится в a12
, или a15
, или a68
, или что-то еще.
Когда вы выполняете фактический запрос, этот столбец будет отображаться с такой шириной.
Демонстрация с фиктивной таблицей, изначально с одним коротким значением, ширина заголовка составляет 12 символов:
create table your_table (head_results varchar2(80));
insert into your_table (head_results)
values ('value_1');
1 row inserted.
set termout off
column col_width new_value col_width noprint
select greatest(nvl(max(length(head_results)), 0),
length('head_results')) as col_width
from your_table;
column head_results format "a&col_width"
set termout on
select head_results from your_table;
HEAD_RESULTS
------------
value_1
При увеличении добавленной стоимости он становится немного шире:
insert into your_table (head_results)
values ('value_222222222');
1 row inserted.
set termout off
column col_width new_value col_width noprint
select greatest(nvl(max(length(head_results)), 0), length('head_results')) as col_width
from your_table;
column head_results format "a&col_width"
set termout on
select head_results from your_table;
HEAD_RESULTS
---------------
value_1
value_222222222
И с вашим самым длинным значением он все еще достаточно широк:
insert into your_table (head_results)
values ('value_99999999999999999999999999999999999999999999999999999999999999');
1 row inserted.
set termout off
column col_width new_value col_width noprint
select greatest(nvl(max(length(head_results)), 0), length('head_results')) as col_width
from your_table;
column head_results format "a&col_width"
set termout on
select head_results from your_table;
HEAD_RESULTS
--------------------------------------------------------------------
value_1
value_222222222
value_99999999999999999999999999999999999999999999999999999999999999