Jak sprawić, aby wyjście sqlplus pojawiało się w jednym wierszu?

47

Mam tabelę ze 100 kolumnami. Podczas wybierania danych w SQL Plusopakowaniach wyjściowych utrudnia to odczyt.

To, co wolę, to albo pojawi się poziomy pasek przewijania, albo w jakiś sposób wyśle ​​wynik less

W SQLPlus uruchamiam następujące instrukcje -

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

Potem w bashbiegu -

mniej output.txt

Dane wyjściowe nadal wydają się opakowane i nieczytelne.

Kshitiz Sharma
źródło
1
Chciałbym również, aby kolumny automatycznie się rozwijały, zamiast konieczności ustawiania rozmiaru kolumny dla każdego z osobna.
Kshitiz Sharma

Odpowiedzi:

58

Nie wystarczy zmusić sqlplus do nie zawijania linii. Konieczne jest również poinformowanie przeglądarki, że używasz do przeglądania pliku buforowania, aby nie zawijał wierszy. Jeśli Twoja przeglądarka jest lesswtedy -Sopcja trzeba użyć według https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . W systemach Unix / Linux możesz użyć, head -1 output.txtaby uzyskać pierwszą linię pliku, a więc sprawdź, czy jest to zgodne z oczekiwaniami, lub możesz od -c output.txt|head sprawdzić, gdzie podział wiersza jest rzeczywiście umieszczony w pliku wyjściowym.

Jeśli wyświetlasz DŁUGIE kolumny, a ich wartości zawierają podziały wierszy, to dla tych wartości kolumn zostanie wydrukowanych wiele wierszy i nie możesz zastąpić tego ustawieniami sqlplus.


Przydatne mogą być następujące polecenia sqlplus:

  • SET LINESIZE linesizedługość linii. W większości przypadków maksymalna wartość linesizeto 32767. Możesz sprawdzić swoją maksymalną wartość, jeśli ustawisz LINESIZE na niepoprawną wartość i sprawdzisz komunikat o błędzie, więc SET LINESIZE 0może dać SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON w przeciwnym razie każda linia w zbiorze buforowym zostanie wypełniona spacjami, aż do osiągnięcia rozmiaru linii.
  • SET TRIMOUT ON w przeciwnym razie każda linia na wyjściu zostanie wypełniona spacjami, dopóki nie zostanie osiągnięty rozmiar linii.
  • SET WRAP OFFObcina linię, jeśli jest dłuższa niż LINESIZE. Nie powinno tak się zdarzyć, jeśli rozmiar linii jest wystarczająco duży.
  • SET TERMOUT OFFpomija drukowanie wyników na wydruku. Linie są nadal zapisywane w pliku buforowania. Może to znacznie przyspieszyć czas egzekucji oświadczenia.
  • SET PAGESIZE 0 ustawić nieskończony rozmiar strony i unikać nagłówków, tytułów itp.
  • Istnieją inne SETparametry dotyczące wyniku (NUMWIDTH, NUMFORMAT, LONG, COLSEP) i wydajności (ARRAYSIZE, LONGCHUNKSIZE).

Musisz użyć COLUMNpolecenia, aby sformatować poszczególne kolumny.

Np. column name format a30Sformatuje kolumnę namena wyjściu do maksymalnej długości 30 znaków.

Jeśli chcesz, aby rozmiar wyświetlacza nie był ustalony, ale powinien być równy rozmiarowi rzeczywistej wartości kolumn w rzędzie, to jedyny sposób, jaki wiem, to to, że zmieniasz klauzulę select swojej instrukcji, aby uzyskać pożądany wynik i użyć operator konkatenacji łańcucha ||, np

select emp_id||' '||first_name||' '||last_name
from emp;

Pełny opis wszystkich zmiennych można znaleźć w Podręczniku użytkownika i podręczniku SQL * Plus .

Jeśli chcesz ponownie użyć niektórych ustawień (lub definicji KOLUMNA), możesz zapisać je w pliku i uruchomić ten plik, gdy będziesz ich potrzebować ponownie. Możesz nawet uruchomić ten plik automatycznie, jeśli uruchomisz sqlplus.

(1) „Jak znaleźć maksymalną wartość LINESIZE (jest zależna od systemu) (Doc ID 1547262.1)”

cud173
źródło
LONGCHUNKSIZENie chodzi tylko o wydajność, to wydaje się być konieczna w celu uniknięcia niepożądanej zawijanie wierszy w uzupełnieniu do LINESIZE, to właśnie eksperymentowali z wyjściem z bezużytecznyDBMS_METADATA.get_ddl()
Daniel Vérité
2
Ładna odpowiedź ...
ypercubeᵀᴹ
2
Co powiedział @ YperSillyCubeᵀᴹ :)
Tom V
Powinieneś użyć SET PAGESIZE 1000zamiast tego 0kolumny nagłówków nie będą drukowane podczas wydawania poleceń `SELECT. Odniesienie .
Pierre C
@PierreC dlatego napisałem „USTAW STRONĘ 0, aby ustawić nieskończony rozmiar strony i unikać nagłówków, tytułów itd.”
miracle173
5

Musisz ustawić poniżej:

SET WRAP OFF
Balazs Papp
źródło
3
set linesize 30000 SET WRAP OFFzrobił dla mnie lewę
ren
2

możesz ustawić w ten sposób

SET WRAP OFF

SET PAGESIZE 0
DevYudh
źródło