web-dev-qa-db-fra.com

Comment faire apparaître la sortie sqlplus sur une seule ligne?

J'ai un tableau avec 100 colonnes. Lors de la sélection de données dans SQL Plus la sortie se termine, ce qui la rend difficile à lire.

Ce que je préfère, c'est soit une barre de défilement horizontale apparaisse, soit envoyer la sortie à less

J'exécute les instructions suivantes dans SQLPlus -

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

Puis dans bash je lance -

moins output.txt

La sortie semble toujours enveloppée et illisible.

51
Kshitiz Sharma

Il ne suffit pas de forcer sqlplus à ne pas boucler les lignes. Il est également nécessaire d'indiquer à la visionneuse que vous utilisez pour afficher le fichier spoule de ne pas encapsuler les lignes. Si votre visionneuse est less alors -S L'option que vous devez utiliser selon https://superuser.com/questions/272818/how-to-turn-off-Word -wrap-in-less . Sous Unix/Linux, vous pouvez utiliser head -1 output.txt Pour obtenir la première ligne d'un fichier et ainsi vérifier si cela est comme prévu ou vous pouvez utiliser od -c output.txt|head Pour voir où les sauts de ligne sont réellement placés dans votre fichier de sortie.

Si vous affichez des colonnes LONGUES et que leurs valeurs contiennent des sauts de ligne, plusieurs lignes seront imprimées pour ces valeurs de colonne et vous ne pouvez pas remplacer cela avec les paramètres sqlplus.


Les commandes sqlplus suivantes peuvent être utiles:

  • SET LINESIZE linesize La longueur de la ligne. Dans la plupart des cas, la valeur maximale de linesize est 32767. Vous pouvez connaître votre valeur maximale si vous définissez LINESIZE sur une valeur non valide et consultez le message d'erreur afin que SET LINESIZE 0 Puisse donner SP2-0267: linesize option 0 out of range (1 through 32767) (1)
  • SET TRIMSPOOL ON Sinon chaque ligne du fichier spool est remplie de blancs jusqu'à ce que la taille de la ligne soit atteinte.
  • SET TRIMOUT ON Sinon chaque ligne de la sortie est remplie de blancs jusqu'à ce que la taille de la ligne soit atteinte.
  • SET WRAP OFF Tronque la ligne si elle est plus longue que LINESIZE. Cela ne devrait pas se produire si la taille des lignes est suffisamment grande.
  • SET TERMOUT OFF Supprime l'impression des résultats sur la sortie. Les lignes sont toujours écrites dans le fichier spoule. Cela peut accélérer considérablement le temps d'exécution d'une déclaration.
  • SET PAGESIZE 0 Pour définir une taille de page infinie et éviter les en-têtes, les titres, etc.
  • Il existe d'autres paramètres SET concernant la sortie (NUMWIDTH, NUMFORMAT, LONG, COLSEP) et les performances (ARRAYSIZE, LONGCHUNKSIZE).

Vous devez utiliser la commande COLUMN pour formater des colonnes individuelles.

Par exemple. column name format a30 Formatera la colonne name dans la sortie à une longueur maximale de 30 caractères.

Si vous voulez que la taille d'affichage ne soit pas fixe mais qu'elle soit égale à la taille de la valeur réelle d'une colonne dans une ligne, la seule façon que je sache est que vous modifiez la clause select de votre instruction pour obtenir le résultat souhaité et utilisez l'opérateur de concaténation de chaînes ||, par exemple.

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

Une description complète de toutes les variables se trouve dans Guide de l'utilisateur et référence SQL * Plus .

Si vous souhaitez réutiliser certains paramètres (ou définitions de COLONNE), vous pouvez les stocker dans un fichier et exécuter ce fichier lorsque vous en avez besoin à nouveau. Vous pouvez même exécuter ce fichier automatiquement si vous démarrez sqlplus.

(1) "Comment trouver la valeur maximale LINESIZE (elle dépend du système) (Doc ID 1547262.1)"

61
miracle173

Vous devez définir ce qui suit:

SET WRAP OFF
6
Balazs Papp

vous pouvez définir comme ça

SET WRAP OFF

SET PAGESIZE 0
2
DevYudh