Come far apparire l'output sqlplus in una riga?


47

Ho una tabella con 100 colonne. Quando si selezionano i dati negli SQL Plusinvolucri di output, rendendo difficile la lettura.

Quello che preferirei è una barra di scorrimento orizzontale da visualizzare o in qualche modo inviare l'output less

Corro seguendo le istruzioni in SQLPlus -

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

Poi bashcorro -

meno output.txt

L'output appare ancora incartato e illeggibile.


1
Vorrei anche che le colonne si espandessero automaticamente invece di dover impostare le dimensioni della colonna per ciascuna individualmente.
Kshitiz Sharma,

Risposte:


58

Non è sufficiente forzare sqlplus a non avvolgere le linee. È inoltre necessario indicare al visualizzatore che si utilizza per visualizzare il file di spooling per non avvolgere le righe. Se il tuo visualizzatore è lessquindi -Sl'opzione che devi utilizzare secondo https://superuser.com/questions/272818/how-to-turn-off-word-wrap-in-less . Su Unix / Linux puoi usare head -1 output.txtper ottenere la prima riga di un file e quindi controlla se questo è come previsto o puoi usare od -c output.txt|head per vedere dove le interruzioni di riga sono effettivamente posizionate nel tuo file di output.

Se si visualizzano colonne LUNGHE e i loro valori contengono interruzioni di riga, verranno stampate più righe per questi valori di colonna e non è possibile sostituirla con le impostazioni sqlplus.


I seguenti comandi sqlplus potrebbero essere utili:

  • SET LINESIZE linesizela lunghezza della linea. Nella maggior parte dei casi il valore massimo per linesizeè 32767. È possibile scoprire il valore massimo se si imposta LINESIZE su un valore non valido e si controlla il messaggio di errore che SET LINESIZE 0può dare SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON in caso contrario, ogni riga nel file di spool viene riempita di spazi vuoti fino al raggiungimento della dimensione di riga.
  • SET TRIMOUT ON in caso contrario, ogni riga nell'output viene riempita con spazi vuoti fino al raggiungimento della dimensione della riga.
  • SET WRAP OFFTronca la linea se è più lunga di LINESIZE. Questo non dovrebbe accadere se la dimensione della linea è abbastanza grande.
  • SET TERMOUT OFFsopprime la stampa dei risultati sull'output. Le righe vengono comunque scritte nel file di spool. Ciò può accelerare molto il tempo di esecuzione di un'istruzione.
  • SET PAGESIZE 0 per impostare un formato pagina infinito ed evitare titoli, titoli e così via.
  • Esistono altri SETparametri relativi all'output (NUMWIDTH, NUMFORMAT, LONG, COLSEP) e alle prestazioni (ARRAYSIZE, LONGCHUNKSIZE).

Devi usare il COLUMNcomando per formattare singole colonne.

Ad esempio column name format a30formatterà la colonna namenell'output su una lunghezza massima di 30 caratteri.

Se vuoi che la dimensione di visualizzazione non sia corretta ma dovrebbe essere uguale alla dimensione del valore effettivo di una colonna in una riga, l'unico modo che conosco è che cambi la clausola select della tua dichiarazione per ottenere il risultato desiderato e usare l'operatore di concatenazione di stringhe ||, ad es

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

Una descrizione completa di tutte le variabili è disponibile nella Guida per l'utente e nei riferimenti di SQL * Plus .

Se si desidera riutilizzare alcune impostazioni (o definizioni COLONNA), è possibile memorizzarle in un file ed eseguirlo quando necessario. È anche possibile eseguire questo file automaticamente se si avvia sqlplus.

(1) "Come trovare il valore massimo di LINESIZE (dipende dal sistema) (ID documento 1547262.1)"


LONGCHUNKSIZEnon è solo per le prestazioni, sembra essere necessaria per evitare indesiderati line-wrapping in aggiunta a LINESIZE, appena sperimentato questo con uscita inutilizzabile daDBMS_METADATA.get_ddl()
Daniel Vérité

2
Bella risposta ...
ypercubeᵀᴹ

2
Cosa ha detto @ YperSillyCubeᵀᴹ :)
Tom V

Dovresti usare SET PAGESIZE 1000invece delle 0colonne altrimenti le intestazioni non verranno stampate quando si eseguono i comandi "SELECT". Riferimento .
Pierre C

@PierreC è per questo che ho scritto "SET PAGESIZE 0 per impostare un formato pagina infinito ed evitare titoli, titoli e così via".
miracle173

5

Devi impostare quanto segue:

SET WRAP OFF

3
set linesize 30000 SET WRAP OFFha fatto il trucco per me
ren l'

2

puoi impostare così

SET WRAP OFF

SET PAGESIZE 0
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.