Remover Espaco entre tabelas

Scripts Diversos para o Oracle SQL*Plus. (Relacionado a ferramenta Oracle SQL*Plus, para questões de SQL, usar o forum SQL)
Responder
fla_torres
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 18 Jul 2006 6:28 pm
Localização: Jandira

Olá, estou iniciando em oracle.

Estou precisando remover o espaço entre as colunas que o sqlplus me retorna. Por ex:

Selecionar tudo

           3458^          32326^       166^        233
Eu preciso que seja:

Selecionar tudo

3458^32326^166^233
Fiz alguns testes com:

Selecionar tudo

#!/bin/bash

sqlplus -s foo/bar@foobar << EOF
SET COLSEP '^';
SET LINESIZE 999;
SET SHOWMODE OFF;
SET VERIFY OFF;
SET TAB ON;
SET HEAD OFF;
SELECT ... ;
EOF
Eu direciono a saida do meu bash para um arquivo, obviamente posso remover estes espaços com um tr, porém a coisa ficaria linda executando isto diretamente do oracle.

Alguma idéia?

Obrigado.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Creio que você não conseguirá fazer isso diretamente no oracle, visto que a coluna ficaria com tamanho variável. Lembre-se que o SQL*plus retorna uma TABELA, com o tamanho da coluna fixa.
fla_torres
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Ter, 18 Jul 2006 6:28 pm
Localização: Jandira

Olá Thomas,

Eu resolvi desta forma, com um script bash, até que alguém me ensinasse a fazer isto com o oracle, e conforme você disse, parece que permanecerei com meu bash mesmo :D .

Selecionar tudo

#!/bin/bash
#
# Funcao que conecta no banco oracle e retorna os dados da query tratados com delimitador ^
#
Conecta() {
        ARQ_TMP=`mktemp`
        typeset query=$1
        typeset login=$2

        echo "
        set colsep '^';
        set head off;
        $query;
        exit
        " | sqlplus -s $login > $ARQ_TMP; sed '/^$/d' $ARQ_TMP > ${ARQ_TMP}_2; sed '/rows/d' ${ARQ_TMP}_2 | tr -d [:blank:]
        rm -f $ARQ_TMP*
}
Conecta "$1" "foo/bar@foobar"


Método de uso: ./script.sh "Select * from ......"

Obrigado,

Abraços.

:-o
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Valeu pela dica!!!
Precisei fazer exatamente isso hoje e seu script funcionou sem nenhuma alteração em ambiente UNIX !

Show de bola
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante