- Este tópico contém 46 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 6 meses atrás por
joffre.
-
AutorPosts
-
23 de maio de 2011 às 10:44 pm #99313
joffre
Participante[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@ServidorDepois de conectado à minha base, eu crio o arquivo de log:
SQL> Spool D:ScriptsLogsOra9iLogs1.txtApó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.sqlFinalizo o Spool:
SQL> Spool OffFecho minha sessão do sqlplus:
SQL> ExitFecho 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 #99314felipeg
Participante[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@ServidorDepois de conectado à minha base, eu crio o arquivo de log:
SQL> Spool D:ScriptsLogsOra9iLogs1.txtApó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.sqlFinalizo o Spool:
SQL> Spool OffFecho minha sessão do sqlplus:
SQL> ExitFecho 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.sqlDesse 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 #99315joffre
ParticipanteObrigado 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 #99316felipeg
Participante[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.sqlOBS: 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 #99317burga
Participante[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.txtSELECT * FROM DUAL;
SPOOL OFF
EXIT24 de maio de 2011 às 8:24 pm #99318felipeg
Participante[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.txtSELECT * 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 #99328joffre
Participante[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 #99329felipeg
Participante[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 #99331burga
ParticipanteVocê 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.txtcria 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 #99332felipeg
Participante[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.txtcria 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 #99334joffre
Participante[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.txtObs.: 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 #99335joffre
ParticipanteDeu certo sim aquela forma
sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @D:ScriptsScripts_Ora9i1.LGComponentesOracle1.sql > D:ScriptsLogs9i1-1.txtO 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 #99336felipeg
Participante[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.txtObs.: 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 #99338joffre
ParticipanteO 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 #99340joffre
ParticipanteUsando 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.