2010-06-09 5 views
21

Je veux être en mesure d'afficher les données résultantes d'une sélection de façon jolie, pas toutes les colonnes sous d'autres.Comment afficher les données de table plus clairement dans Oracle sqlplus

Voici la sqlplus façon affiche mes données de table:

enter image description here

Mais je veux leur montrer que:

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

Non chaque colonne sous l'autre

+0

errr .. Je veux leur montrer comme une table normale. l'un après l'autre – Nubkadiya

Répondre

43

Je habituellement commencer par quelque chose comme:

set lines 256 
set trimout on 
set tab off 

Jetez un oeil à help set si vous avez installé les informations d'aide. Et puis select name,address plutôt que select * si vous ne voulez vraiment que ces deux colonnes.

+1

ne fonctionne pas pour Sqlplus. – user206168

+2

@ user206168 - la question concernait SQL * Plus. Pouvez-vous développer ce qui ne fonctionne pas? –

+0

Quel est le but de 'set space 1' et de' set tab off'? – Coffee

38

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 la largeur des colonnes comme celle-ci (par exemple):

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

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

set linesize 100 pagesize 50 

Vous faites ceci en tapant ces commandes dans le SQL Plus avant d'exécuter la requête. Ou vous pouvez placer ces commandes et la requête dans un fichier de script, par exemple. myscript.sql et exécutez cela. Par exemple:

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

select name, address, telephone 
from mytable; 
+3

Aussi nous voudrions probablement 'SET PAGESIZE 200' (disons) afin de réduire la répétition des en-têtes de colonne dans un grand resultset. – APC

+0

donc cela devrait être fait pendant la création de la table ou pouvez-vous s'il vous plaît elobarate plus sur ce – Nubkadiya

+0

J'ai mis à jour ma réponse –

1

Si vous avez une décharge faite avec sqlplus et la sortie est brouillées comme quelqu'un n'a pas défini ces 3 valeurs avant, il y a un moyen de sortir.

Il ya quelques heures, l'administrateur de DB m'envoie cette sortie laide 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. Ce n'est pas parfait, mais je n'ai pas eu le temps de le peaufiner correctement. En tout cas, ça fait très bien le boulot.

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}' 

Au cas où quelqu'un d'autre voudrait essayer d'améliorer ce script, ci-dessous sont les variables: hnames - les noms de colonnes dans l'en-tête, hdash - en pointillés ci-dessous l'en-tête, h - si je suis actuellement l'analyse syntaxique header (then == 1), val - les données, _d - - pour permuter entre hnames et hdash, ln0 - dernière ligne lue, ln1 - ligne lue précédemment (c'est celle avec laquelle je travaille), ln2 - ligne lue avant ln1

Bonne analyse!

Oh, presque oublié ... J'utilise ceci pour enjoliver sortie sqlplus moi-même:

[[email protected] ~]$ cat prettify_sql 
set lines 256 
set trimout on 
set tab off 
set pagesize 100 
set colsep " | " 

colsep est facultative, mais elle donne un aspect de sortie comme sqlite qui est plus facile à analyser à l'aide de scripts.

EDIT: Un petit aperçu de la production et non analysable analysable

A little preview of parsed and non-parsed output

Questions connexes