web-dev-qa-db-fra.com

Comment afficher plus clairement les données de table dans Oracle sqlplus

Je veux pouvoir afficher les données résultantes d'une sélection d'une manière jolie, pas toutes les colonnes sous d'autres.

Voici comment sqlplus affiche mes données de table:

enter image description here

Mais je veux les montrer comme:

Name   |    Address    |    Phone    |
-------+---------------+-------------+
name1  |    address1   |    phone1   |
name2  |    address2   |    phone2   |
name3  |    address3   |    phone3   |

Pas chaque colonne sous l'autre

25
Nubkadiya

Je commence généralement par quelque chose comme:

set lines 256
set trimout on
set tab off

Jettes un coup d'oeil à help set si les informations d'aide sont installées. Et alors select name,address plutôt que select * si vous ne voulez vraiment que ces deux colonnes.

54
Alex Poole

Si vous voulez dire que vous voulez les voir comme ceci:

WORKPLACEID NAME       ADDRESS        TELEPHONE
----------- ---------- -------------- ---------
          1 HSBC       Nugegoda Road      43434
          2 HNB Bank   Colombo Road      223423

puis dans SQL Plus, vous pouvez définir les largeurs de colonne comme ceci (par exemple):

column name format a10
column address format a20
column telephone format 999999999

Vous pouvez également spécifier la taille de la ligne et la taille de la page si nécessaire comme ceci:

set linesize 100 pagesize 50

Pour ce faire, saisissez ces commandes dans SQL Plus avant d'exécuter la requête. Ou vous pouvez mettre ces commandes et la requête dans un fichier de script, par exemple myscript.sql et exécutez-le. Par exemple:

column name format a10
column address format a20
column telephone format 999999999

select name, address, telephone
from mytable;
42
Tony Andrews

Vous pouvez définir la taille de la ligne selon la largeur de la fenêtre et définir le bouclage à l'aide de la commande suivante.

set linesize 160;
set wrap off;

J'ai utilisé 160 selon ma préférence, vous pouvez le régler entre 100 - 200 et le réglage de l'habillage ne seront pas vos données et il affichera les données correctement.

3
Jagga5589

Dans le cas où vous avez un vidage fait avec sqlplus et que la sortie est tronquée car quelqu'un n'a pas défini ces 3 valeurs auparavant, il y a un moyen de sortir.

Il y a quelques heures à peine, l'administrateur de la base de données m'envoie cette horrible sortie de requête exécutée dans sqlplus (je ne sais pas, peut-être qu'il me déteste ...). J'ai dû trouver un moyen de sortir: c'est un script awk pour analyser cette sortie pour la rendre au moins plus lisible. C'est loin d'être parfait, mais je n'ai pas eu le temps de le polir correctement. Quoi qu'il en soit, il fait très bien le travail.

awk ' function isDashed(ln){return ln ~ /^---+/};function addLn(){ln2=ln1; ln1=ln0;ln0=$0};function isLoaded(){return l==1||ln2!=""}; function printHeader(){hdr=hnames"\n"hdash;if(hdr!=lastHeader){lastHeader=hdr;print hdr};hnames="";hdash=""};function isHeaderFirstLn(){return isDashed(ln0) && !isDashed(ln1) && !isDashed(ln2) }; function isDataFirstLn(){return isDashed(ln2)&&!isDashed(ln1)&&!isDashed(ln0)}                         BEGIN{_d=1;h=1;hnames="";hdash="";val="";ln2="";ln1="";ln0="";fheadln=""}                                 { addLn();  if(!isLoaded()){next}; l=1;             if(h==1){if(!isDataFirstLn()){if(_d==0){hnames=hnames" "ln1;_d=1;}else{hdash=hdash" "ln1;_d=0}}else{_d=0;h=0;val=ln1;printHeader()}}else{if(!isHeaderFirstLn()){val=val" "ln1}else{print val;val="";_d=1;h=1;hnames=ln1}}   }END{if(val!="")print val}'

Dans le cas où quelqu'un d'autre voudrait essayer d'améliorer ce script, voici les variables: hnames - noms de colonnes dans l'en-tête, hdash - pointillés sous l'en-tête, h - si je suis actuellement en train d'analyser l'en-tête (alors == 1), val - les données, _d - - pour permuter entre les noms et hdash, ln0 - dernière ligne lue, ln1 - ligne lue précédemment (c'est celle avec laquelle je travaille réellement), ln2 - ligne lue avant ln1

Bonne analyse!

Oh, j'ai presque oublié ... J'utilise cela pour améliorer moi-même la sortie sqlplus:

[Oracle@ora ~]$ cat prettify_sql 
set lines 256
set trimout on
set tab off
set pagesize 100
set colsep " | "

colsep est facultatif, mais il fait ressembler la sortie à sqlite qui est plus facile à analyser à l'aide de scripts.

EDIT: un petit aperçu de la sortie analysée et non analysée

A little preview of parsed and non-parsed output

1
netikras