У меня есть таблица с 100 столбцами. При выборе данных в SQL Plus
выходных оболочках затрудняется чтение.
Я бы предпочел, чтобы появилась горизонтальная полоса прокрутки или как-то отправить результат на less
Я запускаю следующие операторы в SQLPlus -
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
Тогда bash
я бегу -
меньше output.txt
Вывод все еще кажется обернутым и нечитаемым.
Ответы:
Недостаточно заставить sqlplus не переносить строки. Также необходимо указать зрителю, что вы используете для просмотра файла спула, чтобы не переносить строки. Если ваш зритель -
less
то-S
вариант, который вы должны использовать в соответствии с https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . В Unix / Linux вы можете использовать,head -1 output.txt
чтобы получить первую строку файла и, таким образом, проверить, соответствует ли это ожиданиям, или вы можете использовать,od -c output.txt|head
чтобы увидеть, где разрывы строк фактически размещаются в вашем выходном файле.Если вы отображаете столбцы LONG, а их значения содержат разрывы строк, то для этих значений столбцов будет напечатано несколько строк, и вы не сможете отменить это с помощью настроек sqlplus.
Следующие команды sqlplus могут быть полезны:
SET LINESIZE linesize
длина линии. В большинстве случаев максимальное значениеlinesize
равно 32767. Вы можете узнать максимальное значение, если для LINESIZE установлено недопустимое значение, и проверьте сообщение об ошибке, чтобы оноSET LINESIZE 0
могло датьSP2-0267: linesize option 0 out of range (1 through 32767)
(1)SET TRIMSPOOL ON
в противном случае каждая строка в спулфиле заполняется пробелами, пока не будет достигнут размер строки.SET TRIMOUT ON
в противном случае каждая строка в выводе заполняется пробелами, пока не будет достигнут размер строки.SET WRAP OFF
Обрезает строку, если она длиннее, чем LINESIZE. Этого не должно быть, если размер строки достаточно велик.SET TERMOUT OFF
подавляет вывод результатов на вывод. Строки все еще записываются в файл спула. Это может значительно ускорить время выполнения заявления.SET PAGESIZE 0
установить бесконечный размер страницы и избегать заголовков, заголовков и так далее.SET
параметры, касающиеся вывода (NUMWIDTH, NUMFORMAT, LONG, COLSEP) и производительности (ARRAYSIZE, LONGCHUNKSIZE).Вы должны использовать
COLUMN
команду для форматирования отдельных столбцов.Например
column name format a30
,name
максимальная длина столбца в выходных данных будет 30 символов.Если вы хотите, чтобы размер экрана не был фиксированным, но он должен быть равен размеру фактического значения столбцов в строке, тогда я знаю только один способ - изменить предложение select вашего оператора, чтобы получить желаемый результат и использовать оператор конкатенации строк
||
, напримерПолное описание всех переменных можно найти в руководстве пользователя и справочнике по SQL * Plus .
Если вы хотите повторно использовать некоторые настройки (или определения COLUMN), вы можете сохранить их в файле и запустить этот файл, когда они вам понадобятся снова. Вы даже можете запустить этот файл автоматически, если вы запустите sqlplus.
(1) «Как найти максимальное значение LINESIZE (зависит от системы) (ID документа 1547262.1)»
источник
LONGCHUNKSIZE
речь идет не только о производительности, но, по-видимому, необходимо избегать нежелательного переноса строк в дополнение к этомуLINESIZE
, просто экспериментировал с непригодным выводом изDBMS_METADATA.get_ddl()
SET PAGESIZE 1000
вместо этого,0
иначе заголовки столбцов не будут печататься при выполнении команд `SELECT '. Ссылка .Вам необходимо установить ниже:
источник
set linesize 30000
SET WRAP OFF
сделал свое дело для меняВы можете установить так
источник