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:
Mais je veux les montrer comme:
Name | Address | Phone |
-------+---------------+-------------+
name1 | address1 | phone1 |
name2 | address2 | phone2 |
name3 | address3 | phone3 |
Pas chaque colonne sous l'autre
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.
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;
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.
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