Pular para o conteúdo
Visualizando 15 posts - 1 até 15 (de 47 do total)
  • Autor
    Posts
  • #99313
    Avatar de joffrejoffre
    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@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]

      #99314
      Avatar de felipegfelipeg
      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@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.

        #99315
        Avatar de joffrejoffre
        Participante

          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!

          #99316
          Avatar de felipegfelipeg
          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.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.

            #99317
            Avatar de burgaburga
            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.txt

              SELECT * FROM DUAL;

              SPOOL OFF
              EXIT

              #99318
              Avatar de felipegfelipeg
              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.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.

                #99328
                Avatar de joffrejoffre
                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?

                  #99329
                  Avatar de felipegfelipeg
                  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.

                    #99331
                    Avatar de burgaburga
                    Participante

                      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…

                      #99332
                      Avatar de felipegfelipeg
                      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.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.

                        #99334
                        Avatar de joffrejoffre
                        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.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?

                          #99335
                          Avatar de joffrejoffre
                          Participante

                            Deu 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!

                            #99336
                            Avatar de felipegfelipeg
                            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.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.

                              #99338
                              Avatar de joffrejoffre
                              Participante

                                O 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…

                                #99340
                                Avatar de joffrejoffre
                                Participante

                                  Usando a forma que vocês me passaram:
                                  sqlplus TS_F_ORA9_JOFFRE/dev@srv-tsbd-9i @
                                  D:ScriptsScripts_Ora9i2.NucleoOracle1.sql > D:ScriptsLogs9i2-1.txt

                                  O 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?

                                Visualizando 15 posts - 1 até 15 (de 47 do total)
                                • Você deve fazer login para responder a este tópico.
                                plugins premium WordPress