Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/11/2007, 11h33   #1
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 13h04   #2
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

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

style

Code :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 13h30   #3
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 13h59   #4
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h01   #5
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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!
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h02   #6
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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 ?
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h03   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
tu peux toujours retravailler tes fichiers spools après coup en enlevant les deux derniers caractères, par exemple avec
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/11/2007, 14h03   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 927
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 927
Points : 4 549
Points : 4 549
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é
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/11/2007, 10h53   #9
Membre du Club
 
Inscription : juin 2006
Messages : 206
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 206
Points : 47
Points : 47
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
crazykangourou est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h54.


 
 
 
 
Partenaires

Hébergement Web