sqlplus remove r n t de spool
Pergunta
Existe algum comando sql*plus para remover \r
\n
e\t
Do conjunto de resultados que vai para o arquivo de spool? Isto é, "aparar" todos os registros?
Nós usamos set trim on
No passado, mas não parece fazer bufar o que precisamos agora. Estou tentando evitar chamar a tradução da Oracle, o CHR funções na consulta SQL.
Por exemplo,
set termout off
set spool somefile.dat
set lin 600
select data from mytable;
set spool off;
exit;
Minha consulta retorna isso
|DATA|
|\n \t\t\t\t\t thisistheactualdata \t\t\t\t\t\t\n|
E eu gostaria de manter isso no meu arquivo spooled
thisistheactualdata
atualizar
Bem, acabamos fazendo algo assim.
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;
Mas recebi algumas notícias: precisamos executar isso no Oracle 8, e o regexp_replace não parece estar disponível. :(
Desde já, obrigado.
Solução
Eu não acho que você será capaz de fazer isso com um SQLMais diretiva. SQLPlus é um cliente bastante fino e não foi projetado para tocar os dados do próprio conjunto de resultados.
Se você não deseja usar as funções SQL integradas para modificar a saída, acho que você está preso ao pós-processamento de um arquivo com spooled.
Editar por DCookie: Desde que perdi o pedido original do OP para uma solução baseada em trânslato/CHR (concentrei-me no lamento do OP de que eles estavam presos com 8i), em justiça com o DPBradley, vou retirar minha resposta e incluí-la Como parte deste, já que foi claramente considerado. Aqui está o que eu escrevi:
Você pode tentar a função traduzida para sua situação Oracle 8:
SELECT TRANSLATE(L,'A'||CHR(10)||CHR(9)||CHR(13),'A') FROM test;
Outras dicas
Sem tentar, faz
SET TAB OFF
tem o efeito desejado?