2010-06-09 6 views
3

Existe-t-il une commande sql * plus pour supprimer \r\n et \t du jeu de résultats qui sort dans le fichier spoule? C'est, "couper" chaque enregistrement?sqlplus remove r n t from spool

Nous avons utilisé set trim on dans le passé, mais cela ne semble pas être ce dont nous avons besoin en ce moment. J'essaie d'éviter d'appeler les fonctions chr, de Oracle, dans la requête sql.

Par exemple,

set termout off 
set spool somefile.dat 
set lin 600 

select data from mytable; 

set spool off; 
exit; 

Ma requête renvoie cette

|DATA| 
|\n \t\t\t\t\t thisistheactualdata \t\t\t\t\t\t\n| 

et je voudrais garder dans mon spool

thisistheactualdata 

mise à jour

bien , nous avons fini par faire quelque chose li ke ceci.

set tab off; 
spool /home/oracle/out.dat 

set linesize 20 
set termout off 
set trim on 
select regexp_replace(l,'(\t|\n)','') from test; 

spool off; 
exit; 

Mais quelques mauvaises nouvelles: Nous devons exécuter cet oracle dans 8 et regexp_replace ne semble pas être disponible. :(

Merci à l'avance.

+0

Voulez-vous dire la suppression de ces personnages quand ils font partie des données (par opposition à Streaming Sortie SQL * Plus sans les caractères qu'elle fournit)? – dpbradley

+0

Oui, supprimez-les des colonnes de sortie. – Tom

+0

Si vous avez installé le paquet OWA_PATTERN, pourriez-vous écrire votre propre fonction wrapper pour imiter regexp_replace()? Peut-être une fonction générique strip/trim pour simplifier les requêtes - donc si vous trouvez un autre caractère que vous voulez supprimer, vous pouvez changer la fonction plutôt que toutes les requêtes. –

Répondre

3

Je ne pense pas que vous allez être en mesure de le faire avec une directive SQL Plus SQL Plus est un client assez léger et n'est pas conçu pour toucher les données du jeu de résultats lui-même. Vous ne voulez pas utiliser les fonctions SQL intégrées pour modifier la sortie, alors je pense que vous êtes coincé avec le post-traitement d'un fichier spoule. Puisque j'ai raté la demande originale de l'OP pour une solution non basée sur TRANSLATE/CHR (je me suis concentré sur la complainte de l'OP sur le fait qu'ils étaient coincés avec 8i), en toute justice envers dpbradley je vais retirer ma réponse et l'inclure dans le cadre de celui-ci, car il a été clairement considéré. Voici ce que je l'ai écrit:

Vous pouvez essayer la fonction TRADUIRE votre situation Oracle 8:

SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test; 
+0

Oui, a également atteint la conclusion "ne va pas arriver". Merci – Tom

0

Sans essayer, ne

SET TAB OFF 

ont l'effet désiré?

+0

non, merci quand même. – Tom

Questions connexes