Pular para o conteúdo
  • Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 12 anos, 1 mês atrás por Avatar de Fábio PradoFábio Prado.
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #104676
    Anônimo

      Pessoal bom dia,
      Venho mais uma vez recorrer aos amigos do fórum.
      Tenho o seguinte Script.
      */
      declare
      vHoraAtual integer;
      vHoraProximo integer;
      vHora varchar(20);
      vTotReg integer;
      vNroSerie varchar2(20);
      vDtamovimento varchar2(15);
      vNroempresa number;

      begin
      vNroSerie := ‘UR010500046′;
      vDtamovimento := ’02-Oct-2012’;
      vNroempresa := 1;

      — Inicio o contador 5926 = 1 Minuto
      select (DBMS_UTILITY.GET_TIME + 5926) into vHoraProximo from dual;
      begin
      select count(1)
      into vTotReg
      from tb_docto a
      where a.nroempresa = vNroempresa
      and a.dtamovimento = vDtamovimento
      and a.replicacao = ‘P’;

      if vTotReg > 0 then
      WHILE vTotReg > 0 LOOP
      select (DBMS_UTILITY.GET_TIME) into vHoraAtual from dual; — Atualiza o contador atual
      if vHoraAtual = vHoraProximo then — se hora atual = hora programada executa
      begin
      select count(1)
      into vTotReg
      from tb_docto a
      where a.nroempresa = vNroempresa
      and a.dtamovimento = vDtamovimento
      and a.replicacao = ‘P’;

      — Atualizo o proximo horário que vai executar 5926 = 1 Minuto
      select (DBMS_UTILITY.GET_TIME + 5926) into vHoraProximo from dual;
      end;
      end if;
      end loop;
      end if;
      end;
      end;
      /*

      A lógica é tipo um timer de 1 em 1 minuto executar a instrução abaixo :

      select count(1)
      into vTotReg
      from tb_docto a
      where a.nroempresa = vNroempresa
      and a.dtamovimento = vDtamovimento
      and a.replicacao = ‘P’;

      Se esta instrução retornar 0 para a variável vTotReg, uma outra ação será executada.
      A questão é, se eu executo um update eu uma outra sessão no campo a.replicacacao para ‘F’.
      parece que este count(1), não esta sendo executado, porém se eu o colocar o update ai dentro funciona.
      Parece que loop não está funcinando ou se é algum problema de sessão.
      Alguém ajuda ?

      #104678
      Avatar de rmanrman
      Participante

        @clebermano

        O seu script só vai ver a modificação do UPDATE que é rodado em outra sessão após do COMMIT. Isso segue o conceito de transação.

        Essa solução não ficaria melhor utilizando job ou schedule?

        #104684
        Avatar de Fábio PradoFábio Prado
        Participante

          @clebermano, concordo com o rman, não tente reinventar a roda. Vc não precisa criar um timer, o Oracle já tem recursos que podem te ajudar nisso. Crie um scheduler job que chama uma stored procedure que irá conter o código que vc quer executar.

          []s

          Fábio Prado
          http://www.fabioprado.net

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