sqlplus: pb format colonne dans un fichier texte issu d'une requête

sqlplus: pb format colonne dans un fichier texte issu d'une requête - SQL/NoSQL - Programmation

Marsh Posté le 28-08-2007 à 21:42:28    

bonjour,
 
comme le titre l'indique, j'ai un problème pour mettre en forme les champs d'une requête sql exportée vers un fichier texte sous sqlplus (spool <fichier>, pagesize <x>, linesize <x>, colsep '|', etc ...)
 
j'utilise donc le '|' comme séparateur, mais les champs apparaissent comme formatés, du style :
L066001     |E066001     |     1254.36|etc
L067001     |E067001     |      255.12|etc
 
j'aimerais bien avoir quelque chose plutôt comme ça :
L066001|E0660001|1254.36|etc
L067001|E0670001|255.12|etc
 
le "column format" pourrait presque faire le job, mais comme il y a des nombres de longueurs variables, ça va pas.
 
merci d'avance pour votre aide.


Message édité par manu le 28-08-2007 à 21:42:51
Reply

Marsh Posté le 28-08-2007 à 21:42:28   

Reply

Marsh Posté le 29-08-2007 à 09:00:41    

j'avais besoin un jour d'exporter dans un fichier texte, et avec le peu de pl/sql que j'avais fait dans ma vie, j'avais utilisé UTL_FILE car plus simple pour le formattage de données
 
par contre il faut activé le paramètre UTL_FILE_DIR dans le fichier d'init, et généralement les DBAs n'aiment pas trop ca

Reply

Marsh Posté le 29-08-2007 à 10:38:22    

merci pour ta réponse couak.
 
effectivement c'est une solution, mais j'aimerais bien utiliser spool, d'autant qu'il n'y a que cette histoire de format qui pose problème, sinon tout est ok.
 
quelqu'un a une idée ... ?

Reply

Marsh Posté le 29-08-2007 à 14:19:01    

Code :
  1. SELECT champ1 || '|' || champ2 || '|' || champ3 ...

Reply

Marsh Posté le 30-08-2007 à 17:08:13    

merci MagicBuzz.
oui je connais cette syntaxe aussi, je n'ai pas encore essayé mais a priori c'est la même chose que d'utiliser COLSEP (séparateur de colonne), sauf qu'on mets les séparateurs à la main ...
 
je vais essayer au cas où mais je ne pense pas que ça change grand chose.
 
je viens de voir que la taille par défaut d'une colonne est la taille du champ, j'ai comme l'impression qu'il n'est pas possible d'éliminer ces maudits blancs ! à moins qu'il y est une option de la commande "column format" qui permette de le faire, mais pour l'instant je trouve pas ...
 
je me suis dépanné avec toad, mais pour une extraction quotidienne, va falloir trouver autre chose ...
 
au fait, je réalise que je n'ai pas mis la requete, la voilà :
 

Code :
  1. SET LINESIZE 250
  2. SET HEADING OFF
  3. SET TERMOUT OFF
  4. SET COLSEP '|'
  5. spool D:\scripts-sql\extract-A1.txt
  6. select evl.sigdep, lad.sigadr, eve.sigtie, eve.codctg, eve.typeve, evl.numeve, eve.refext, evl.datliv, evl.datexp, eve.dateve, eve.datcre, eve.datval, eve.datmod, eve.heuvali, evp.numpos, evl.codpro, evl.qtecde, evp.codbar, evl.sigliv
  7. FROM mev a, eve, evp, mev b, pro, evl, lad
  8. WHERE a.codsoc_phy = eve.codsoc
  9.    AND a.codent = 'EVE'
  10.    AND a.SEGMENT = ' '
  11.    AND evp.codsoc = eve.codsoc
  12.    AND evp.achvte = eve.achvte
  13.    AND evp.typeve = eve.typeve
  14.    AND evp.numeve = eve.numeve
  15.    AND b.codsoc = a.codsoc
  16.    AND b.codent = 'PRO'
  17.    AND b.SEGMENT = ' '
  18.    AND pro.codsoc = b.codsoc_phy
  19.    AND pro.codpro = evp.codpro
  20.    AND evl.codsoc = evp.codsoc
  21.    AND evl.achvte = evp.achvte
  22.    AND evl.typeve = evp.typeve
  23.    AND evl.numeve = evp.numeve
  24.    AND evl.numpos = evp.numpos
  25. and substr(eve.datval,1,6)='200707'
  26. and eve.codctg in ('A1')
  27. and eve.codsoc=1 and eve.typeve='LIV' and eve.achvte='V'
  28. and lad.codsoc=eve.codsoc and lad.typtie='CLI' and lad.typadr='FAC' and lad.sigtie=eve.sigtie
  29. order by numeve, numpos, evl.sigliv;
  30. spool off


 

Reply

Marsh Posté le 30-08-2007 à 19:51:55    

Non, l'intérêt de faire des concaténations, c'est contrairement à COLSEP (du moins il me semble) c'est qu'il ne va pas te coller de blancs inutiles autour des valeurs afin de faire un joli fichier formatté.
 
Donc, vu que tes "SIGxxx" tu vas systématiquement avoir la valeur suivie d'un certain nombre d'espaces afin d'avoir exactement 12 caractères (puisque les SIGxxx sont définis comme VARCHAR2(12)).
 
Alors qu'avec des concaténations, tu vas par exemple avoir (pour les 2 premières colonnes) :


PARIS|000001
LYON|000002
BORDEAUX|000003


 
PS : Tiens, toi aussi tu bosses avec Générix ? :D

Reply

Marsh Posté le 31-08-2007 à 14:24:39    

ça marche ! merci MagicBuzz.
 
ouais c'est du generix. à propos ça marche bien chez toi ? parce que nous on est en phase de recette depuis un bon moment, et y a pas mal de soucis ...

Reply

Marsh Posté le 31-08-2007 à 15:57:36    

Ca dépend de ce que t'appelle des soucis :D
 
Ici, on est passé de la 4.4 à la 5.2
 
Bah... C'st effarant le nombre de régressions qu'on a subit. Faut dire qu'ils se sont planté en gravant le CD des binaires, et on a eu une version en cours de dev non testée à la place de la version release :D
 
Mais bon, maintenant c'est relativement stable. Il nous reste cependant quelques bugs à la con, et le support semble avoir bien du mal à les corriger :/
Genre, évitez d'utiliser le PPE "RECORI" (sur AREC) parcequ'il est buggé jusqu'à la moelle :D Ca fait depuis octobre dernier qu'on met en prod différentes versions du binaire, et depuis cet époque qu'on ne peut pas s'en servir correctement (même si maintenant il ne reste plus que des bugs mineurs).
 
C'est bien domage tout ça. En soit, Générix est un excellent programme, bourré d'excellentes idées, et très souple d'un point de vue paramétrage. Seul truc, c'est qu'entre ce que dit la doc et ce que font réellement les binaires, des fois on a des surprises :/
 
Par contre, niveau modèles de données, moi je kiffe à 100%, même si personnellement je serais allé bien plus loin dans certains domaines.

Reply

Marsh Posté le 01-09-2007 à 21:47:42    

nous on a aussi ce genre de problèmes (mauvais écrans ou exe), mais y en a + ... et les gens de chez generix qui travaillent pour nous ont un peu du mal à les corriger comme chez toi ...
 
sinon je trouve l'ergonomie plus que moyenne, limite 19ème siècle ... avec parfois des logiques différentes d'un écran à un autre, les doubles confirmations sur les boutons enfoncés, etc ...
 
on a aussi des problèmes de blocages de files batch (qui semblent être résolus depuis quelques temps, mais ça a duré un moment !)
 
pour ce qui est du modèle de données, je ne suis pas encore en mesure d'apprécier, je suis surtout admin système/réseau et exploit, je suis un dba de fortune mais des formations sont à venir ...
 
merci encore.
 

Reply

Marsh Posté le 03-09-2007 à 09:36:09    

Ah ben l'ergonomie et Générix, c'est une histoire qui a commencé au 20° sciècle avant JC et qui a terminé au bout d'une heure. Depuis, ça n'a pas évolué d'un kopek :D
 
En fait, la version telnet est bien plus ergonomique. Et la GUI "client lourd" n'est qu'une simple surcharge de cette dernière. C'est pour cette raison que l'ergonomie est un peu à chier en client/serveur. Le coup de la double confirmation, c'est vrai que c'est chiant au début, mais quand on a l'habitude des raccourcis claviers c'est bien pratique :
F11 : annuler. on ne clique qu'une fois.
F10 : valider. on clique deux fois.
 
l'intérêt de double-valider, c'est que si par inadvertance on appuie sur F10 au lieu de F11, on s'en rend compte tout de suite, car on reste bloqué sur l'écran, et on peut encore annuler. en revanche, quand on a l'habitude, on fait systématiquement F10-F10, donc la double confirmation ne pose pas de problème.
 
par contre, ce qui est très chiant, c'est par exemple dans l'écran gcov_1 : tu es sur "tiers". tu veux saisir un numéro de commande, tu fais "tab". pof, ça te lance une recherche sur les tiers (m'enfin !). du coup, faut un clic souris pour accéder à numeve.
 
par contre, si tu fais "f5" sur un champ (recherche), tu ne peux pas passer d'un champ à l'autre par click, ça t'affiche une liste et tab fait rien ! il faut faire "entrée" :o
 
si ça c'est pas du relourdage ++ :D
 
pour le reste, EGX (enfin, GCE) est là pour nous permettre de faire notre propre ergonomie. j'ai fait une formation l'an dernier sur le framework. je dois dire que comme d'hab, les idées sont génialissimes. mais la mise en oeuvre... j'aurai pu faire mieux y'a 5 ans je pense.
 
résultat on a un concept génial, mais une implémentation très lourde et assez bourrée de bugs. le seul truc qui tiens un peut la route, c'est XDME, qui a été codé par un stagiaire :o
 
pis les templates livrés par défaut bah... l'ergonomie est à chier mais c'est pas une surprise :D


Message édité par MagicBuzz le 03-09-2007 à 09:36:41
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed