Mam tabelę ze 100 kolumnami. Podczas wybierania danych w SQL Plus
opakowaniach 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 bash
biegu -
mniej output.txt
Dane wyjściowe nadal wydają się opakowane i nieczytelne.
Odpowiedzi:
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
less
wtedy-S
opcja 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.txt
aby uzyskać pierwszą linię pliku, a więc sprawdź, czy jest to zgodne z oczekiwaniami, lub możeszod -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 linesize
długość linii. W większości przypadków maksymalna wartośćlinesize
to 32767. Możesz sprawdzić swoją maksymalną wartość, jeśli ustawisz LINESIZE na niepoprawną wartość i sprawdzisz komunikat o błędzie, więcSET LINESIZE 0
moż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 OFF
Obcina 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 OFF
pomija 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.SET
parametry dotyczące wyniku (NUMWIDTH, NUMFORMAT, LONG, COLSEP) i wydajności (ARRAYSIZE, LONGCHUNKSIZE).Musisz użyć
COLUMN
polecenia, aby sformatować poszczególne kolumny.Np.
column name format a30
Sformatuje kolumnęname
na 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
||
, npPeł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)”
źródło
LONGCHUNKSIZE
Nie chodzi tylko o wydajność, to wydaje się być konieczna w celu uniknięcia niepożądanej zawijanie wierszy w uzupełnieniu doLINESIZE
, to właśnie eksperymentowali z wyjściem z bezużytecznyDBMS_METADATA.get_ddl()
SET PAGESIZE 1000
zamiast tego0
kolumny nagłówków nie będą drukowane podczas wydawania poleceń `SELECT. Odniesienie .Musisz ustawić poniżej:
źródło
set linesize 30000
SET WRAP OFF
zrobił dla mnie lewęmożesz ustawić w ten sposób
źródło