Як зробити так, щоб вихід sqlplus відображався в одному рядку?


47

У мене є таблиця зі 100 стовпцями. Вибираючи дані у SQL Plusвихідних обгортаннях, це ускладнює читання.

Що я хотів би хотіти - це горизонтальна смуга прокрутки, яка з’являється, або якимось чином надсилати вихід less

Я запускаю наступні оператори в SQLPlus -

SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;

Тоді bashя біжу -

менше output.txt

Вихід все ще виглядає завернутим і нечитабельним.


1
Я також хотів би, щоб стовпці автоматично розгорталися замість того, щоб мені встановлювати розмір стовпця для кожного окремо.
Kshitiz Sharma

Відповіді:


58

Недостатньо змусити 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 emp_id||' '||first_name||' '||last_name
from emp;

Повний опис всіх змінних можна знайти в Посібнику та довідці користувача SQL * Plus .

Якщо ви хочете повторно використовувати деякі налаштування (або визначення COLUMN), ви можете зберегти їх у файлі та запустити цей файл, коли вони вам знову знадобляться. Ви навіть можете запустити цей файл автоматично, якщо запустити sqlplus.

(1) "Як знайти максимальне значення LINESIZE (це залежно від системи) (ID документа 1547262.1)"


LONGCHUNKSIZEне тільки про продуктивність, по- видимому, необхідно , щоб уникнути небажаних перенесення рядків в доповненні до LINESIZE, просто експериментував з цим непридатним виходом зDBMS_METADATA.get_ddl()
Daniel Vérité

2
Приємна відповідь ...
ypercubeᵀᴹ

2
Що сказав @ YperSillyCubeᵀᴹ :)
Том V,

Ви повинні використовувати SET PAGESIZE 1000замість 0інакше стовпці заголовків не друкується при видачі `SELECT» команди. Довідник .
Pierre C

@PierreC, тому я написав "SET PAGESIZE 0, щоб встановити нескінченний розмір сторінки і уникати заголовків, заголовків тощо".
чудо173


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.