IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sql*Plus Oracle Discussion :

sqlplus spool et largeur de colonne fixe


Sujet :

Sql*Plus Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut sqlplus spool et largeur de colonne fixe
    Bonjour,

    je voudrais exporter dans un fichier texte des données d'une table.
    Pour cela j'usitlise sqplus et spool.

    J'ai besoin pour réimporter ailleurs (hyperfile windev) de respecter la taille des colonnes, car nous n'utilisons pas de séparateur de colonne.

    J'arrive à donner une taille de colonne voulue en utilisant to_char.
    Cela marche bien pour toutes les colonnes, SAUF la dernière qui est problématique.

    J'ai un script générique car j'ai plusieurs tables à exporter, donc je ne peux pas utiliser linesize.
    Pourquoi la taille de ma dernière colonne n'est pas respectée

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    il y aurait-il un problème a ajouté une colonne de 1 char à la fin?

    style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    SQL> set lin 32767 trims on
    SQL> select emp.*,'X' from emp;
         EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO '
    ---------- ---------- --------- ---------- --------- ---------- ---------- ---------- -
          7369 SMITH      CLERK           7902 17-DEC-80        800                    20 X
          7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30 X
          7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30 X
          7566 JONES      MANAGER         7839 02-APR-81       2975                    20 X
          7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30 X
          7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30 X
          7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10 X
          7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20 X
          7839 KING       PRESIDENT            17-NOV-81       5000                    10 X
          7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30 X
          7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20 X
          7900 JAMES      CLERK           7698 03-DEC-81        950                    30 X
          7902 FORD       ANALYST         7566 03-DEC-81       3000                    20 X
          7934 MILLER     CLERK           7782 23-JAN-82       1300                    10 X

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut @laurentschneider
    J'avais pensé à ajouter une colonne vide, seulement, je dois respecter le format pour que l'importation se fasse correctement...

    Je pense que j'opterai pour cette solution si je n'arrive pas à obtenir le résultat voulu avec les options de sqlplus

  4. #4
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oui, à la rigueur tu peux calculer "dynamique" la longueur de linesize, c'est vrai que c'est un peu érotique, mais voici à quoi ça peut ressembler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    SQL> set lin 32000 trims on und - head on pages 0 emb on
    SQL> spool xxx.txt
    SQL> set trims off
    SQL> select emp.*,'x' from emp where rownum=1;
         EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO /
    ---------- ---------- --------- ---------- ---------- ---------- ---------- ---------- -
          7369 SMITH      CLERK           7902 1980-12-17        800                    20 x
     
    SQL> spool off
    SQL> !perl -ne "print 'set lin '.(length(\$_)-3) if (/----/)" <xxx.txt >xxx.sql
    SQL> @xxx
    SQL> sho lin
    linesize 86
    SQL> select * from emp;
         EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ---------- ---------- ---------- ----------
          7369 SMITH      CLERK           7902 1980-12-17        800                    20
          7499 ALLEN      SALESMAN        7698 1981-02-20       1600        300         30
          7521 WARD       SALESMAN        7698 1981-02-22       1250        500         30
          7566 JONES      MANAGER         7839 1981-04-02       2975                    20
          7654 MARTIN     SALESMAN        7698 1981-09-28       1250       1400         30
          7698 BLAKE      MANAGER         7839 1981-05-01       2850                    30
          7782 CLARK      MANAGER         7839 1981-06-09       2450                    10
          7788 SCOTT      ANALYST         7566 1987-04-19       3000                    20
          7839 KING       PRESIDENT            1981-11-17       5000                    10
          7844 TURNER     SALESMAN        7698 1981-09-08       1500          0         30
          7876 ADAMS      CLERK           7788 1987-05-23       1100                    20
          7900 JAMES      CLERK           7698 1981-12-03        950                    30
          7902 FORD       ANALYST         7566 1981-12-03       3000                    20
          7934 MILLER     CLERK           7782 1982-01-23       1300                    10

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par crazykangourou Voir le message
    J'avais pensé à ajouter une colonne vide
    il faut que la colonne à ignorer à l'import soit non-nulle!

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    oui, à la rigueur tu peux calculer "dynamique" la longueur de linesize, c'est vrai que c'est un peu érotique,
    C'est l'inconvénient d'avoir des colonnes X ?

  7. #7
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu peux toujours retravailler tes fichiers spools après coup en enlevant les deux derniers caractères, par exemple avec

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par pifor Voir le message
    C'est l'inconvénient d'avoir des colonnes X ?
    je sens que je vais passer pour un obsédé

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 206
    Points : 81
    Points
    81
    Par défaut
    Ca rigole, ca rigole

    Il va falloir que je trouve une solution parce que se trimspool, entraîne d'autres conséquences :
    Par exemple, j'ai un table avec 5 colonnes et que je veux des tailles de colonne fixe, là je suis complètement dans la panade.
    Car si mes 2 dernières colonnes sont vides, je me retrouve avec un décalage de 2 colonne car l'instruction de fin de ligne se place juste après la 3eme !!!

    Je vous raconte pas le merdier!

    Alors le problème de la largeur fixe en fin de colonne reste d'acutalité, MAIS en plus, si j'ai une colonne vide, il faut me la remplir avec des espaces.
    Y a t il une option dans le spool pour faire un truc du genre
    mais automatiquement?

    Merci de m'avoir lu

Discussions similaires

  1. JTable avec des largeurs de colonnes fixées
    Par alakauf dans le forum Composants
    Réponses: 1
    Dernier message: 08/09/2012, 19h31
  2. [XL-2003] Export de données excel avec largeur de colonne fixe
    Par bedrohung dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2010, 20h56
  3. [PR-2007] Largeur de colonne fixée en VBA
    Par curt dans le forum VBA Project
    Réponses: 1
    Dernier message: 17/10/2009, 16h52
  4. Réponses: 1
    Dernier message: 13/02/2009, 11h38
  5. largeur de colonne fixes d'un tableau
    Par midotoon dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/01/2008, 08h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo