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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top