Pular para o conteúdo
  • Este tópico contém 8 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 7 meses atrás por eversonpiza.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #88064
    Anônimo

      É possível executar uma package em background a partir de outra package. Explicando: packageA chama packageB se determinada condição for satisfeita em A. B deve ser executada e não pode mudar o comportamento de A, ou seja, se em B ocorrer um Raise, isto não pode afetar a sequência de execução da A. Neste caso A tem simplesmente a função de chamar a B.

      #88065
      Marcio68Almeida
      Participante

        Você pode tratar a exceção em B e definir NULL, isso não mudaria o que acontece em A, o problema é que A ficaria aguardando o processo de B.
        Você quer que o processo B ocorra paralelamente a A ?

        #88066
        Anônimo

          Após lançada, a package B pode ser processada em paralelo, porém, teria que rodar de forma autonoma.

          #88069
          Marcio68Almeida
          Participante

            Creio que seja possível você fazer a chamada da procedure com EXEC, assim ela será executada em segundo plano.
            Mas é melhor conferir com os demais DBAs

            #88073
            David Siqueira
            Participante

              Se eu entendi bem você quer que ambas tenham de certa forma uma “dependencia ” na execução, porém uma deve esperar por um possivel parametro que seria enviado para a principal, a fim de informar se esta deve seguir sua execução ignorando o “erro” gerado na secundária. Por um acaso não seria mais fácil incorporar tudo isso em uma única package e apenas criar pequenas procedures na sua package body para fazer todo o seu processo?

              Ats

              #88086
              Avatar photoLeonardo Litz
              Participante

                Olá corvetto, veja se é isso oque vc precisa:

                procedure procedureA
                is
                begin

                if 1 = 1 then

                begin
                procedureB;
                exception when others then
                null;
                end;

                end if;

                end procedureA;

                No exemplo acima, a procedure A chama a procedure B se satisfazer uma condição, caso contenha um erro na B, não ocorrerá nada em A.
                Desta forma, A espera o termino da execução de B, oque não caracteriza uma execução em paralelo.

                Ou vc necessita que B seja executada em paralelo de A?

                Vlw Leonardo Litz

                #88092
                Anônimo

                  O que estou tentando descobrir é se é possível colocar uma package em execução em background. Sei que é possível fazer isto a partir do Forms ou SO utilizando o @ fazendo com que a package entre em execução em segundo plano.

                  #88096
                  Ishii
                  Participante

                    Olá,

                    Para esclarecer a diferença básica de funcionamento de uma procedure e uma package, e com isso até melhorar a programação em alguns casos e também a performance…isso em termos simples…

                    Procedures quando são chamadas para execução seguem o seguinte caminho:
                    1-Dicionário de Dados
                    2-Memória da Sessão
                    3-Execução em Memória da procedure

                    Package quando são chamadas para execução tem uma característica interessante:
                    1-Dicionário de Dados
                    2-Memória Compartilhada
                    3-Execução em Memória da Package Body toda

                    Se uma procedure chama outra procedure e assim por diante, aumento as leituras no Dicionário e como isso fica na minha sessão não está compartilhado com outras sessões… ou seja, se a mesma procedure for chamada por outra sessão há novo processo…

                    Já na package, como isso fica compartilhado há um certo ganho nisso…além disso se todas as procedures utilizadas estiverem na mesma package ou até em outra dessa forma otimizada, o ganho de performance é bastante considerável em processos do tipo Batch (lotes) ou ainda quando a procedure é chamada várias vezes ao longo do dia…

                    Mas mesmo assim ambas podem estar em Background porém sempre haverá uma espera de resultado como disse o Litz no seu exemplo.

                    Espero ter ajudado um pouco…

                    []s Ishii

                    #88105
                    eversonpiza
                    Participante

                      Não sei se entendi bem a sua duvida, mas acho que oq vc quer pode ser feito via Job ou Scheduler.

                      A procedure A ‘agenda’ a B para rodar em background.

                      Seria isso?

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