Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #87121
    evandro_araujo
    Participante

      Pessoal,

      tenho o controle de acesso um sistema de terceiros aqui…..onde cada vez que o funcionario
      passa na porta…com o cracha alimenta a tabela forponto.marcacao

      tenho a seguinte trigger

      create or replace trigger T_IA_GERA_H_ENTRADA_NOVO
      after insert on forponto.marcacao
      for each row
      declare
      vexist varchar2(1);
      vhorrefreal integer;
      vdfjorentradanucleo_func integer;
      vsetincodigo integer;
      vDFFUNCRACHA varchar2(17);
      vemail varchar2(200);
      vnome varchar2(50);
      vsysdate date;
      crlf varchar2( 2 ):= CHR( 13 ) || CHR( 10 );
      v_mensagem varchar2(800);
      — vmarcreal date;
      begin
      if (:new.coda_cod_coletor <> ’04’ and :new.coda_cod_coletor <> ’01’) and :new.marc_cod_acesso = ’01’ then
      begin
      IA_P_GERA_H_ENTRADA(:new.marc_cod_cracha,:new.coda_cod_coletor,:new.marc_dat_marcacao);
      exception when no_data_found then
      null;
      end;
      end if;

      end T_IA_GERA_H_ENTRADA_NOVO;

      essa trigger ira processar esta procedure (esta procedure dispara um email para o administrador, estou
      recebendo este email quando habilito esta trigger), porem a tabela forponto.marcacao na é alimentada,
      quando eu desabilito esta trigger a tabela forponto.marcacao volta a alimentar.

      no aguardo

      Evandro

      #87124
      Manoel872
      Participante

        Amigo posta o código da IA_P_GERA_H_ENTRADA e faz um teste comenta a chamada dessa procedure e ativa a trigger, pois se com isso persistir a informação na tabela você já pode afirma que o erro esta na chamada da procedure.

        Att,

        Manoel.

        #87129
        Marcio68Almeida
        Participante

          Acho que é por que a procedure que envia email não retorna nada e e que chamou fica aguardando…

          #87138
          evandro_araujo
          Participante

            create or replace procedure IA_P_GERA_H_ENTRADA(
            marc_cod_cracha in varchar2 ,
            coda_cod_coletor in varchar2,
            marc_dat_marcacao in date

            ) is
            vexist varchar2(1);
            vhorrefreal integer;
            vdfjorentradanucleo_func integer;
            vsetincodigo integer;
            vDFFUNCRACHA varchar2(17);
            vemail varchar2(50);
            vnome varchar2(50);
            vsysdate date;
            crlf varchar2( 2 ):= CHR( 13 ) || CHR( 10 );
            v_mensagem varchar2(800);
            begin

              vsysdate:= sysdate;
              begin
              select nvl('S','N')
                  into vexist
              from
                  ia_t_gera_h_entrada t
              where
                  t.crac_cod_cracha = marc_cod_cracha
              and
                 to_date(t.marc_dt_marcacao,'dd/mm/yyyy') =   to_date(vsysdate,'dd/mm/yyyy');
            

            — to_date(t.marc_dt_marcacao,’dd/mm/yyyy’) = to_date(:new.marc_dat_marcacao,’dd/mm/yyyy’);
            exception when no_data_found then
            vexist := ‘N’;
            end;

              if vexist = 'N' then
                 begin
                        select
                             jor.dfjorentradanucleo,
                             fun.dffunnome
                        into
                             vdfjorentradanucleo_func,
                             vnome
            
                        from forponto.pfunfpto fun,
                             forponto.pfuhfpto fhor,
                             forponto.phorfpto hor,
                             forponto.phojfpto hjor,
                             forponto.pjorfpto jor
            
                        where fun.dffuncracha = fhor.dffuncracha
                          and fhor.dfhorcodigo = hor.dfhorcodigo
                          and hor.dfhorcodigo = hjor.dfhorcodigo
                          and hjor.dfjorcodigo = jor.dfjorcodigo
                          and fun.dffunativo = 'S'
                          and hjor.dfhojorigem = 'H'
                          and hjor.dftpdcodigo in ('02','04')
                          and fhor.dffuhinicio = trunc(sysdate)
                          and hjor.dfhojfator = trim(to_char(to_char(trunc(sysdate), 'D'),'000'))
                          and not exists (select *
                                          from forponto.pfuafpto aff
                                          where fun.dffuncracha = aff.dffuncracha
                                            and aff.dfmtvcodigo = '100'
                                          )
                          and to_number(fun.dffuncracha) = to_number(marc_cod_cracha);
                      exception when others then
                        null;
                      end;
            
            
            
            
            
                      vhorrefreal := ((to_number(trim(to_char(marc_dat_marcacao,'hh24'))) * 60) + to_number(trim(to_char(marc_dat_marcacao,'mi'))));
            
                      begin
                             insert into mgia.IA_T_GERA_H_ENTRADA(crac_cod_cracha,
                                                              coda_cod_coletor,
                                                              marc_dt_marcacao,
                                                              marc_hor_marcacao_atual,
                                                              dfjorentradanucleo_func)
                                                              values
                                                              (marc_cod_cracha,
                                                              coda_cod_coletor,
                                                              marc_dat_marcacao,
                                                              vhorrefreal,
                                                              vdfjorentradanucleo_func);
                     exception when others then
                         null;
                     end;
            

            —————————- hora de tolerancia por exemplo 30 minutos
            — vhoratolerancia:=5;
            — if vhorrefreal > (vdfjorentradanucleo_func+vhoratolerancia) then
            if vhorrefreal > (vdfjorentradanucleo_func) then
            begin

                               select
                                  E.SET_IN_CODIGO
                               into
                                  vsetincodigo
                               from
                                  mglan.lan_encarregados E
            
                               where
                                  to_number(E.dffuncracha) = to_number(marc_cod_cracha);
            
                               exception when others then
                                  null;
                               end;
            
            
                              begin
                                 insert into mgia.IA_T_GERA_PENDENCIA_COLAB(crac_cod_cracha,
                                                                            marc_dt_marcacao,
                                                                            set_in_codigo,
                                                                            status)
                                                                            values(
                                                                            marc_cod_cracha,
                                                                            marc_dat_marcacao,
                                                                            vsetincodigo,
                                                                            0);
                               exception when others then
                                  null;
                               end;
            
            
                              begin
                                     SELECT
                                         P.DFFUNCRACHA
                                     INTO
                                         vDFFUNCRACHA
                                     FROM
                                         FORPONTO.PFUNFPTO P,
                                         MGLAN.LAN_SETORENC E
                                     WHERE
                                         P.DFFUNCRACHA=E.ENC_ST_CRACHA
                                     AND
                                         E.SET_IN_CODIGO=vsetincodigo
                                     AND
                                         P.DFFUNATIVO = 'S'
                                     AND
                                         P.DFFUNCRACHA NOT IN(SELECT
                                                                  A.DFFUNCRACHA
                                                              FROM
                                                                  FORPONTO.PFUAFPTO A
                                                              WHERE
                                                                  A.DFMTVCODIGO IN('100','101'));
                               exception when others then
                                  null;
                               end;
            

            —- dbms_output.put_line(‘ valormensal –> ‘ || vDFFUNCRACHA);

                               begin
                                    SELECT
                                       l.usu_st_email
                                    into
                                       vemail
                                    FROM
                                       MGLAN.LAN_ENCARREGADOS L
                                    WHERE
                                       L.ENC_ST_TIPO = 'E'
                                    AND
                                      to_number(L.DFFUNCRACHA) = to_number(vDFFUNCRACHA);
            
                               exception when others then
                                  null;
                               end;
            
                               v_mensagem := crlf;
            
                               v_mensagem := v_mensagem || 'Atencao! Atraso de Funcionário! no dia '|| to_char(marc_dat_marcacao) || '';
            
                               v_mensagem := v_mensagem || crlf;
            
                               v_mensagem := v_mensagem || crlf;
            
                               v_mensagem := v_mensagem || 'Existe atraso do funcionário  '|| to_char(vnome) || ' .';
            
            
                               v_mensagem := v_mensagem || crlf;
            
                               v_mensagem := v_mensagem || 'Favor entrar no sistema Encarregados e avaliar este atraso.';
                               v_mensagem := v_mensagem || crlf;
                               v_mensagem := v_mensagem || crlf;
            
                               v_mensagem := v_mensagem || '&lt;&lt;&lt;&gt;&gt;&gt;';
            
                               v_mensagem := v_mensagem || crlf;
            
                               v_mensagem := v_mensagem || crlf;
            
                              mgia.envio_email(<a href="mailto:'mega@lanmard.local" />'mega@lanmard.local</a>','evandroa@lanmard.local','Atraso de Funcionario!',v_mensagem);
                              ---mgia.envio_email(<a href="mailto:'mega@lanmard.local" />'mega@lanmard.local</a>',vemail,'Atraso de Funcionario!',v_mensagem);
            
            
            
                       end if;
            

            —————————–hora de tolerancia por exemplo 30 minutos
            end if;
            end IA_P_GERA_H_ENTRADA;

            #87139
            evandro_araujo
            Participante

              O estranho se eu utilizar a opcao TEST WINDOW do pl sql e tentar incluir uma linha na minha tabela marcacao, acontece que INCLUI a linha normalmente e executa a TRIGGER, so quando vou passar o cracha..ele nao inclui na minha tabela marcacao se a minha TRIGGER tiver habilitada.

              #87140
              Avatar photoLeonardo Litz
              Participante

                Cara da uma olhada se não esta dando erro de trigger multante.

                Como vc esta fazendo um select na tabela forponto dentro da procedure e a trigger é nesta mesma tabela.

                #87142
                evandro_araujo
                Participante

                  Pessoal,

                  criei uma trigger assim:

                  create or replace trigger T_IA_GERA_H_ENTRADA_NOVO1
                  after insert on forponto.marcacao
                  for each row
                  declare
                  — local variables here
                  begin

                                          dbms_output.put_line(' numfuncionarios --&gt; ');  
                  

                  end T_IA_GERA_H_ENTRADA_NOVO1;

                  e estou com o mesmo problema……

                  help..nao sei mais o que fazer

                  #87146
                  Ishii
                  Participante

                    Olá,

                    Sugiro duas ações simultâneas:

                    1) Habilite o trace do Client no sqlnet.ora para saber se há algum retorno para o caso do controle de acesso que não seja identificado pelo equipamento;
                    2) Habilite o trace da Sessão Oracle também para podermos verificar a razão para identificar o motivo deste comportamento estranho.

                    SQLNET.ORA
                    trace_file_client = log.trc
                    trace_directory_client = c:
                    trace_level_client = SUPPORT

                    Para o trace da Sessão pode-se criar uma trigger de logon (depende da versão do Oracle) executando o comando:
                    alter session set sql_trace = TRUE;

                    Coloque os resultados aqui para uma análise

                    []s Ishii

                    #87148
                    Marcio68Almeida
                    Participante

                      [quote=”evandro_araujo”:1c140v9k]O estranho se eu utilizar a opcao TEST WINDOW do pl sql e tentar incluir uma linha na minha tabela marcacao, acontece que INCLUI a linha normalmente e executa a TRIGGER, so quando vou passar o cracha..ele nao inclui na minha tabela marcacao se a minha TRIGGER tiver habilitada.[/quote]
                      Vamos por eliminação…
                      Se você insere uma linha na mão, a trigger funciona e o processo ocorre sem problemas, correto ?
                      Se você chama um processo que irá inserir a linha e dá erro, devemos olhar o processo, não a tabela com a trigger…
                      Acho que o processo está aguardando alguma coisa que acaba não acontecendo.
                      Faça o que nosso amigo Ishii sugeriu, habilite os traces e veja o que realmetne está acontecendo…

                      #87167
                      evandro_araujo
                      Participante

                        Pessoal,

                        tenho duas perguntas.

                        1 – Este arquivo sqlnet.ora é o que esta no meu mcro ???Vou acrescentar este comando neste arquivo correto?

                        2 – Este comando alter session set sql_trace = TRUE; vou executar no sql plus..correto?

                        #87170
                        Ishii
                        Participante

                          [quote=”evandro_araujo”:1ai6otd5]Pessoal,

                          tenho duas perguntas.

                          1 – Este arquivo sqlnet.ora é o que esta no meu mcro ???Vou acrescentar este comando neste arquivo correto?

                          2 – Este comando alter session set sql_trace = TRUE; vou executar no sql plus..correto?[/quote]

                          Olá

                          1- SQLNET.ORA acho melhor usar o micro que faz a comunicação com o seu equipamento. Se esse equipamento não usa o sqlnet.ora veja como é feita a comunicação dele com o Oracle. Há outras opções de habilitar este trace de client, mas será necessário saber como a conexão é feita.
                          2-Quem abre a sessão Oracle do Equipamento? Se for um user fixo, você pode criar uma trigger de logon e colocar este comando, assim toda vez que o user logar no Oracle já seta a sessão para sql_trace= true.

                          []s Ishii

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