- Este tópico contém 46 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 7 meses atrás por joffre.
-
AutorPosts
-
23 de maio de 2011 às 10:44 pm #99313joffreParticipante
[b]Boa tarde.
Gostaria de saber se há no Oracle/SqlPlus uma forma de passar vários parâmetros em apenas uma linha de comando.
No meu caso, preciso executar um script e enviar o log para um arquivo externo, ao invés dele aparecer dentro do prompt. Mas preciso de tudo em uma linha apenas.
Atualmente, faço da seguinte forma:[/b]
[i]Primeiro eu acesso o sqlplus:
C:> sqlplus Usuario/Senha@Servidor
Depois de conectado à minha base, eu crio o arquivo de log:
SQL> Spool D:ScriptsLogsOra9iLogs1.txt
Após criado o arquivo de log, tudo o que for digitado agora será enviado a esse arquivo quando eu finalizar o Spool. No meu caso, irei criar algumas tabelas baseando-me em um arquivo .sql:
SQL> @D:ScriptsScripts_Ora9i2.NucleoOracle1.sql
Finalizo o Spool:
SQL> Spool Off
Fecho minha sessão do sqlplus:
SQL> Exit
Fecho o prompt de comando:
C:> Exit
[/i]
[b]E pronto. Tudo beleza. Mas eu preciso fazer todos esses procedimentos (pelo menos até o fechamento da sessão do sqlplus) em apenas uma linha.
É possível?[/b]23 de maio de 2011 às 11:03 pm #99314felipegParticipante[quote=”joffre”:1oz6vboj][b]Boa tarde.
Gostaria de saber se há no Oracle/SqlPlus uma forma de passar vários parâmetros em apenas uma linha de comando.
No meu caso, preciso executar um script e enviar o log para um arquivo externo, ao invés dele aparecer dentro do prompt. Mas preciso de tudo em uma linha apenas.
Atualmente, faço da seguinte forma:[/b]
[i]Primeiro eu acesso o sqlplus:
C:> sqlplus Usuario/Senha@Servidor
Depois de conectado à minha base, eu crio o arquivo de log:
SQL> Spool D:ScriptsLogsOra9iLogs1.txt
Após criado o arquivo de log, tudo o que for digitado agora será enviado a esse arquivo quando eu finalizar o Spool. No meu caso, irei criar algumas tabelas baseando-me em um arquivo .sql:
SQL> @D:ScriptsScripts_Ora9i2.NucleoOracle1.sql
Finalizo o Spool:
SQL> Spool Off
Fecho minha sessão do sqlplus:
SQL> Exit
Fecho o prompt de comando:
C:> Exit
[/i]
[b]E pronto. Tudo beleza. Mas eu preciso fazer todos esses procedimentos (pelo menos até o fechamento da sessão do sqlplus) em apenas uma linha.
É possível?[/b][/quote]Amigo,
Já que você precisa de um bloco de código apenas uma linha faça o seguinte
1 – Tudo que for código a rodar dentro do sql plus (ou seja do primeiro spool em diante) coloque em um arquivo executar.sql
2 – chame o sqlplus da seguinte forma
C:> sqlplus Usuario/Senha@Servidor @Caminhoexecutar.sql
Desse jeito ele chamará o sql que possui todas as informações necessárias usando apenas uma linha do prompt do CMD.
Qualquer dúvida é só postar.
Atenciosamente,
Felipe.24 de maio de 2011 às 1:44 am #99315joffreParticipanteObrigado pela atenção amigo.
Isso aí eu já sabia.
Mas e o log? E pra já fechar a sessão do SQLPlus?
Preciso de tudo em apenas uma linha!
24 de maio de 2011 às 2:10 am #99316felipegParticipante[quote=”joffre”:wjyiuord]Obrigado pela atenção amigo.
Isso aí eu já sabia.
Mas e o log? E pra já fechar a sessão do SQLPlus?
Preciso de tudo em apenas uma linha![/quote]
Seguinte,
O spool irá funcionar normalmente, afinal você está chamando um arquivo sql para ser executado dentro do sqlplus.
Sobre sair direto eu acabei de testar com a linha de comando abaixo e deu certo (geração do log, execução do comando e saída do cmd)
C:TEMP>start sqlplus user/senha@orcl @C:tempteste.sql
OBS: Não tinha terminado a postagem pois você comentou que se fizesse apenas a execução já estava bom.
OBS2: O cmd irá chamar uma nova tela e fará o serviço, logo depois de terminar, fechará, sobre fechar a mesma tela ai acho que o único jeito no windows é usar um .bat.Atenciosamente,
Felipe.24 de maio de 2011 às 8:11 pm #99317burgaParticipante[quote=”joffre”:18f2mcji]Mas e o log? E pra já fechar a sessão do SQLPlus?
Preciso de tudo em apenas uma linha![/quote]
Em resumo, o que o Felipe está dizendo é que esses comandos do SPOOL e EXIT do SQLPLUS você pode colocar dentro do arquivo “.sql” que você está chamando. Exemplo:
Dentro do arquivo teste.sql teria:
SPOOL teste.txt
SELECT * FROM DUAL;
SPOOL OFF
EXIT24 de maio de 2011 às 8:24 pm #99318felipegParticipante[quote=”burga”:2z67qozx][quote=”joffre”:2z67qozx]Mas e o log? E pra já fechar a sessão do SQLPlus?
Preciso de tudo em apenas uma linha![/quote]
Em resumo, o que o Felipe está dizendo é que esses comandos do SPOOL e EXIT do SQLPLUS você pode colocar dentro do arquivo “.sql” que você está chamando. Exemplo:
Dentro do arquivo teste.sql teria:
SPOOL teste.txt
SELECT * FROM DUAL;
SPOOL OFF
EXIT[/quote]Exato Burga!
Ou, se necessário o arquivo teste poderia chamar um outro sql, esse sim com as instruções (no caso do arquivo já existir ou haver mais de um arquivo).
PS: Efetuando novamente a leitura eu entendi a observação, pois o Joffre entendeu que esta abordagem não encerrava nem o sql plus.
Se ele quer fechar tudo (incluindo o CMD) creio que só um bat resolveria ( em Linux é possível), se ele quer sair apenas do sql plus a resposta acima já serve.
Atenciosamente,
Felipe.25 de maio de 2011 às 3:11 pm #99328joffreParticipante[b][i]Deu certo. Adicionando as linhas Spool e a linha Exit, vai fazer exatamente o que eu quero, mas dessa forma fica meio inviável, visto que terei que abrir mais de 200 scripts e setar isso em cada um deles.
Há alguma forma de fazer isso funcionar através da linha de comando ao invés de ter que alterar o arquivo .sql?
Agradeço![/i][/b]
Obs.: Ao final dos meus logs estão aparecendo uns números NADA a ver. Teve uma vez que apareceu o número 6, outra o número 17 e outra vez o número 19. Com isso, a tela do sqlplus não está fechando. Alguma dica?
25 de maio de 2011 às 3:13 pm #99329felipegParticipante[quote=”joffre”:167i1ztd][b][i]Deu certo. Adicionando as linhas Spool e a linha Exit, vai fazer exatamente o que eu quero, mas dessa forma fica meio inviável, visto que terei que abrir mais de 200 scripts e setar isso em cada um deles.
Há alguma forma de fazer isso funcionar através da linha de comando ao invés de ter que alterar o arquivo .sql?
Agradeço![/i][/b][/quote]
O que exatamente farão seus scripts?
E que tipo de retorno vc espera no spool?Atenciosamente,
Felipe.25 de maio de 2011 às 3:31 pm #99331burgaParticipanteVocê pode usar também o “redirecionador” de output…
o caractere “>” faz com que a saída do seu comando seja gravado em um determinado arquivo. Exemplo:
sqlplus user/senha@orcl @C:tempteste.sql > teste.txt
cria ou sobrescreve um arquivo e joga o conteúdo da saída nele
> dá um append na saída…Acho que no unix é a mesma coisa, depois tenho que dar uma olhada…
25 de maio de 2011 às 3:45 pm #99332felipegParticipante[quote=”burga”:3ga2ekbm]Você pode usar também o “redirecionador” de output…
o caractere “>” faz com que a saída do seu comando seja gravado em um determinado arquivo. Exemplo:
sqlplus user/senha@orcl @C:tempteste.sql > teste.txt
cria ou sobrescreve um arquivo e joga o conteúdo da saída nele
> dá um append na saída…Acho que no unix é a mesma coisa, depois tenho que dar uma olhada…[/quote]
Exato burga, é o mesmo comando para ambos os sistemas.
Nesse caso (200 scripts) o ideal seria fazer como citei no começo, criar um sql para chamar todos eles e realizar o output.
E dependendo do tipo de retorno, dbms_output.put_line por exemplo você também terá que verificar as informações do cabeçalho dos seus scripts.
Atenciosamente,
Felipe.25 de maio de 2011 às 4:27 pm #99334joffreParticipante[b][i]O serviço que estou fazendo é automatizar a criação da base de dados. Os scripts SQL têm CREATE TABLE, INSERT, DROP, DELETE FROM, etc… São vários scripts .sql mesmo!
Tentei usando o “redirecionador de output” que o felipeg deu idéia, mas não funcionou. Os logs não foram criados e o output foi dentro da tela do prompt mesmo.
Aqui estão alguns dos comandos que estou usando:[/b][/i]
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i1.LGComponentesOracle1.sql > D:ScriptsLogs9i1-1.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle1.sql > D:ScriptsLogs9i2-1.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle2.sql > D:ScriptsLogs9i2-2.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle3.sql > D:ScriptsLogs9i2-3.txt
Obs.: Ao final dos meus logs estão aparecendo uns números NADA a ver quando uso aquela forma de adicionar texto aos scripts. Teve uma vez que apareceu o número 6, outra o número 17 e outra vez o número 19. Com isso, a tela do sqlplus não está fechando. Alguma dica?
25 de maio de 2011 às 4:32 pm #99335joffreParticipanteDeu certo sim aquela forma
sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i1.LGComponentesOracle1.sql > D:ScriptsLogs9i1-1.txt
O que está dando problema é meu script para rodar essa linha. Não está reconhecendo nada após o “>”.
Obrigado pela ajuda!
25 de maio de 2011 às 4:43 pm #99336felipegParticipante[quote=”joffre”:nun4k5qj][b][i]O serviço que estou fazendo é automatizar a criação da base de dados. Os scripts SQL têm CREATE TABLE, INSERT, DROP, DELETE FROM, etc… São vários scripts .sql mesmo!
Tentei usando o “redirecionador de output” que o felipeg deu idéia, mas não funcionou. Os logs não foram criados e o output foi dentro da tela do prompt mesmo.
Aqui estão alguns dos comandos que estou usando:[/b][/i]
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i1.LGComponentesOracle1.sql > D:ScriptsLogs9i1-1.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle1.sql > D:ScriptsLogs9i2-1.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle2.sql > D:ScriptsLogs9i2-2.txt
Run Command: sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i2.NucleoOracle3.sql > D:ScriptsLogs9i2-3.txt
Obs.: Ao final dos meus logs estão aparecendo uns números NADA a ver quando uso aquela forma de adicionar texto aos scripts. Teve uma vez que apareceu o número 6, outra o número 17 e outra vez o número 19. Com isso, a tela do sqlplus não está fechando. Alguma dica?[/quote]
Só para não parecer ladrão de sugestões quem deu a idéia do output foi o Burga (muito boa por sinal) eu só complementei 😉 .
Sobre o seu output só estão aparecendo números? estranho, nenhum retorno sql do tipo concluído com sucesso ou algum erro?
Será que dentro dos scripts não tem nenhum comando de formatação de saída (como por exemplo um set).
Não tem nenhum texto com caracters especiais (como o infame &) e você esqueceu de dar um set define off?
Enfim, se um desses sqls não for muito grande poste ele aqui para que possamos verificar.
Atenciosamente,
Felipe.25 de maio de 2011 às 4:57 pm #99338joffreParticipanteO menor script tem 28 linhas. Se não tiver problemas pelo tamanho eu posto aqui. Não há caracteres especiais. Se souber algum comando de output do VBScript e quiser compartilhar, agradeço. Eu não sei se há algum!
Outra dúvida… Dê uma olhada NESSA IMAGEM
Nessa tela, como deve ser o comando para usar os arquivos .sql?
Obs.: Estou logado como Sys, logo, vou precisar setar para qual base de dados o arquivo .sql vai criar/inserir/dropar…
25 de maio de 2011 às 5:06 pm #99340joffreParticipanteUsando a forma que vocês me passaram:
sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @
D:ScriptsScripts_Ora9i2.NucleoOracle1.sql > D:ScriptsLogs9i2-1.txtO SQLPlus continua aberto ao final da execução. Preciso finalizar o prompt para que ele feche. Alguma dica de como finalizá-lo sem precisar inserir EXIT ao final do arquivo .sql?
-
AutorPosts
- Você deve fazer login para responder a este tópico.