- Este tópico contém 8 respostas, 6 vozes e foi atualizado pela última vez 16 anos, 7 meses atrás por
eversonpiza.
-
AutorPosts
-
21 de julho de 2009 às 10:45 pm #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.
21 de julho de 2009 às 10:53 pm #88065Marcio68Almeida
ParticipanteVocê 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 ?21 de julho de 2009 às 10:56 pm #88066Anônimo
Após lançada, a package B pode ser processada em paralelo, porém, teria que rodar de forma autonoma.
21 de julho de 2009 às 11:13 pm #88069Marcio68Almeida
ParticipanteCreio 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 DBAs21 de julho de 2009 às 11:31 pm #88073David Siqueira
ParticipanteSe 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
22 de julho de 2009 às 4:05 pm #88086Leonardo Litz
ParticipanteOlá corvetto, veja se é isso oque vc precisa:
procedure procedureA
is
beginif 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
22 de julho de 2009 às 6:14 pm #88092Anô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.
22 de julho de 2009 às 6:45 pm #88096Ishii
ParticipanteOlá,
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 procedurePackage 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 todaSe 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
22 de julho de 2009 às 8:42 pm #88105eversonpiza
ParticipanteNã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?
-
AutorPosts
- Você deve fazer login para responder a este tópico.