web-dev-qa-db-fra.com

Largeur de colonne Oracle pour toutes les colonnes

L'un des problèmes lors de l'exécution d'une instruction longue pour afficher différentes colonnes, par exemple

 select g.guestid, g.forename, g.surname, b.bookingid,
 b.arrivedate, b.departdate, br.floorno, br.roomno from...

la taille de la colonne sur le terminal linux semble être un problème. Par exemple, la colonne Forename VarChar (80) occupe une grande partie de la largeur de l'écran lors de l'exécution de l'instruction ci-dessus. Une façon de la réduire consiste à:

SET COLUMN FORENAME FORMAT A10

par exemple. Cependant, de nombreuses colonnes devront être répétées, ce qui est assez long. c'est à dire.

SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

etc...

Existe-t-il un moyen de régler la largeur de la colonne en fonction de la largeur du texte afin que tout s’intègre parfaitement dans la mémoire? et pas comme ça ..

enter image description here

Je préférerais une solution qui n'implique pas l'utilisation de FONCTIONS.

8
MooHa

Non, il n’existe pas de moyen simple d’adapter automatiquement la largeur de colonne à la largeur du texte de SQL * Plus.

Cependant, les scripts peuvent vous rendre la vie plus facile.

Tout d’abord, réduisez la dactylographie. Ne faites pas SET COLUMN FORENAME FORMAT A10, faites plutôt quelque chose comme @c forename 10.

17:33:31 SYSTEM@dwal> cl col
columns cleared
17:33:33 SYSTEM@dwal> select * from dual;

D
-
X

Elapsed: 00:00:00.01
17:33:37 SYSTEM@dwal> @c dummy 10
17:33:43 SYSTEM@dwal> select * from dual;

DUMMY
----------
X

Elapsed: 00:00:00.01
17:33:45 SYSTEM@dwal> get s:\c.sql
  1* col &1. for a&2.
17:33:50 SYSTEM@dwal>

Ou cacher rapidement de larges colonnes comme ceci:

17:48:44 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;

OWNER                          TABLE_NAME
------------------------------ ------------------------------
SYS                            CON$

Elapsed: 00:00:00.24
17:48:49 SYSTEM@dwal> @np owner
17:48:53 SYSTEM@dwal> select owner, table_name from all_tables where rownum = 1;

TABLE_NAME
------------------------------
CON$

Elapsed: 00:00:00.26
17:48:56 SYSTEM@dwal> get s:\np
  1  col &1 noprint
  2* @undef

Ce ne sont que deux des nombreux scripts que j'utilise quotidiennement. Cette approche prend du temps et une certaine attention personnelle à la personnalisation pour s’y habituer et la rendre efficace, mais réduit le nombre de touches sur lesquelles vous appuyez de façon spectaculaire.

Deuxièmement, il y a glogin.sql. C'est un script qui s'exécute chaque fois que vous vous connectez quelque part. Je suppose que vous connaissez une liste de "longues" colonnes qui font que vos lignes se terminent.

Il suffit de les énumérer, et votre

SET COLUMN FORENAME FORMAT A10
SET COLUMN SURNAME FORMAT A10

les paramètres de colonne sont définis chaque fois que vous vous (re) connectez.

1
be here now

Comme déjà indiqué par d'autres utilisateurs, il n'y a pas de solution simple pour sqlplus. Il peut être utile d’utiliser le fichier glogin.sql ou login.sql (@ René Nyffenegger a fourni un article sur ces fichiers ). Vous pouvez mettre des définitions de colonne dans ces fichiers. Si vous interrogez toujours les mêmes requêtes ou si vous avez une dénomination cohérente de vos colonnes, cela peut aider.

Ou vous mettez les instructions de colonne dans un script que vous appelez par

@scriptname.sql

si vous voulez utiliser le format de colonne. Vous placez le script dans un répertoire qui fait partie de la variable SQLPATH afin qu'il puisse être appelé à partir de n'importe quel répertoire.

Ou vous utilisez un autre outil. Un utilisateur a déjà pointé vers SQLcl .

0
miracle173

Tom Kyte a écrit une procédure print_table , qui affiche le jeu de résultats de manière verticale.

Par exemple:

SQL> exec print_table('select g.guestid, g.forename, ... from ...')
GUESTID                       : 210
FORENAME                      : DINGLE
...
etc...
....
-----------------

PL/SQL procedure successfully completed.

Cette procédure est pratique, en particulier lorsque le jeu de résultats est petit, idéalement pas plus de 10 lignes.

0