Jump to content
Erika Fragoso

Conexão não encerra com UTL_SMTP.QUIT

Recommended Posts

   Boa tarde 

 

Estou com problema para fechar a a conexão do UTL_SMTP. 

Quando executo a procedure mais de uma vez,  apresenta erro:  "too many open connections".

 

Exemplo:

 

Se executo esse bloco inteiro ele apresenta o erro a seguir:

 

EXEC ATUALIZACAO(382002, 73, 356.000, 371.900);
EXEC ATUALIZACAO(382003, 73, 373.600, 386.900);
EXEC ATUALIZACAO(382004, 73, 389.600, 399.400);
EXEC ATUALIZACAO(382005, 73, 117.500, 128.200);
EXEC ATUALIZACAO(382006, 73, 130.900, 138.800);
EXEC ATUALIZACAO(382007, 73, 146.600, 157.000);

 

 

------------ERRO---------------

0678. 00000 -  "too many open connections"
*Cause:    An attempt to open a connection failed because too many
           are already open by this session. The number of allowed
           connections varies as some may be in use through other
           components which share the same pool of allowed connections.
*Action:   Retry after closing some other connection. The number of
           connections supported is currently not adjustable.

 

Agora se executo um por um não da erro. A impressão que tenho é que não esta fechando a conexão do UTL_SMTP.

Ja tentei utilizar o  UTL_SMTP.QUIT e o   UTL_SMTP.CLOSE_CONNECTION  dentro e fora do loop , mas não funcionou.

 

 

Alguém tem alguma dica do que pode ser feito ?

 

Segue a procedure :

 

--Enviar o E-Mail
  IF bEnviaMail then    --(StrDscMsg is not NULL) THEN
    StrCabMail := 'VERSAO : '||p_Versao ||' DIV: '||p_Division ||crlf||crlf||
                  'ID Anti  Novo ID  KM Ini  KM Fim  Lin  Vel  Tipo  H_Ini  H_Fim Motivo  ';
    StrDscMsg  :=  StrCabMail ||crlf|| StrDscMsg;
    
     connmail   := UTL_SMTP.OPEN_CONNECTION('smtp',25);


      FOR RegEmail IN(
                       SELECT MR_MAIL
                         FROM MAIL_REFRESH
                        WHERE MR_GRUPO = 1
                     ) LOOP
                         
     BEGIN
                 ----connmail   := UTL_SMTP.OPEN_CONNECTION('smtp',25);


                StrMailMsg := 'Date: '   ||TO_CHAR( SYSDATE,'dd Mon yyyy hh24:mi:ss') ||crlf||
                              'From:  <' ||'restricao@gmail.com'||'>'               ||crlf||
                              'Subject: '||'REFRESH VERSAO ' || p_Versao ||
                                         TO_CHAR( SYSDATE,' dd/mm/yyyy hh24:mi:ss')   ||crlf||
                              'To: '     || ToEmail                                   ||crlf||
                              ' Atualizações que foram retiradas e recolocadas na base ' ||crlf||
                              ''                                                      ||crlf||                              
                              'Banco: ' || db_name || ' - ' || schema_name            ||crlf|| 
                              ''                                                      ||crlf||
                              StrDscMsg                                               ||crlf||
                              ''                                                      ||crlf||
                              ''                                                      ||crlf||
                              '[ATUALIZACAO]';
                UTL_SMTP.HELO(connmail,'smtp');
                UTL_SMTP.MAIL(connmail,'restricao@gmail.com');
                UTL_SMTP.RCPT(connmail, RegEmail.MR_MAIL);
                UTL_SMTP.DATA(connmail,StrMailMsg);
               -- UTL_SMTP.QUIT(connmail);
      END;
       
      End Loop;
              UTL_SMTP.QUIT(connmail);  
  End If;
  COMMIT;
      
END;

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By igor.js167
      Boa tarde,
       
      No banco de dados tenho as informações a seguir, em diferentes tabelas: Acesso,  Dose prescrita, tempo e volume. Preciso, de acordo com essas informações, calcular dois valores chamados bolus e rate seguindo uma condicional. O problema é como vou retornar estes dois valores, se não tem atributo onde eu possa inseri-los?
       
      Eu deveria criar uma nova tabela pra eles? Existe como retornar estes atributos sem ter de mexer em nenhuma tabela?
      O código atual que tenho, é:
      select a.nr_atendimento ATENDIMENTO, obter_nome_pf_atend(a.nr_atendimento) NOME, obter_data_nascto_pac_atend(a.nr_atendimento) NASCIMENTO, 'DOSE: ' || decode(a.qt_dose,',5','2.500 UI','1','5.000 UI','1,5','7.500 UI','2','10.000 UI','2,5','12.500 UI','3','15.000 UI','3,5','17.500 UI', '4','20.000 UI','4,5','22.500 UI','5','25.000 UI','5,5','27.500 UI','6','30.000 UI') DOSE, 'VOLUME: ' || a.qt_volume || ' ml' VOLUME, obter_desc_material(a.cd_material) MEDICAMENTO, d.qt_hora_min_sessao TEMPO, e.nr_seq_tecnica ACESSO -- Inserir aqui condicionais para cálculo de BOLUS e RATE from CPOE_material a, atend_paciente_unidade b, hd_escala_dialise c, cpoe_dialise d, hd_acesso e where a.cd_material = 49749 and a.nr_atendimento = b.nr_atendimento and d.nr_atendimento = b.nr_atendimento and obter_cd_pes_fis_atend(b.nr_atendimento) = c.cd_pessoa_fisica and b.dt_saida_unidade is null and a.dt_liberacao is not null and a.dt_suspensao is null and d.dt_liberacao is not null and d.dt_suspensao is null and c.dt_fim is null and e.cd_pessoa_fisica = obter_pessoa_atendimento(b.nr_atendimento,'C') and e.ie_adequado = 'S' and e.dt_perda_retirada is null and c.nr_seq_turno = :turno and c.nr_seq_escala = :escala E as condicionais que quero inserir é mais ou menos assim:
      SE acesso arteriovenoso então: se dose_prescrita = 2500 então bolus = volume e rate = '-' se dose_prescrita = 5000 então: se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 6,0 e rate = 1,6 se tempo = 3:30h ou 3:35 então Bolus = 6,0 e rate = 1,3 se tempo = 4:00 ou 4:05h então bolus = 6,0 e rate = 1,1 se dose_prescrita = 7500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 8,0 e rate = 2,8 se tempo = 3:30h ou 3:35 então Bolus = 8,0 e rate = 2,3 se tempo = 4:00 ou 4:05h então bolus = 8,0 e rate = 2,0 se dose_prescrita = 10000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 10,0 e rate = 4,0 se tempo = 3:30h ou 3:35 então Bolus = 10,0 e rate = 3,3 se tempo = 4:00 ou 4:05h então bolus = 10,0 e rate = 2,9 se dose_prescrita = 12500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 11,0 e rate = 5,6 se tempo = 3:30h ou 3:35 então Bolus = 11,0 e rate = 4,7 se tempo = 4:00 ou 4:05h então bolus = 11,0 e rate = 4,0 se dose_prescrita = 15000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 13,0 e rate = 6,8 se tempo = 3:30h ou 3:35 então Bolus = 13,0 e rate = 5,7 se tempo = 4:00 ou 4:05h então bolus = 13,0 e rate = 4,9 se dose_prescrita = 30000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 23,0 e rate = 14,8 se tempo = 3:30h ou 3:35 então Bolus = 23,0 e rate = 12,3 se tempo = 4:00 ou 4:05h então bolus = 23,0 e rate = 10,6 se não então null SE acesso cateter então: se dose_prescrita = 2500 então bolus = volume e rate = '-' se dose_prescrita = 5000 então: se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 6,0 e rate = 1,3 se tempo = 3:30h ou 3:35 então Bolus = 6,0 e rate = 1,1 se tempo = 4:00 ou 4:05h então bolus = 6,0 e rate = 1,0 se dose_prescrita = 7500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 8,0 e rate = 2,3 se tempo = 3:30h ou 3:35 então Bolus = 8,0 e rate = 2,0 se tempo = 4:00 ou 4:05h então bolus = 8,0 e rate = 1,8 se dose_prescrita = 10000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 10,0 e rate = 3,3 se tempo = 3:30h ou 3:35 então Bolus = 10,0 e rate = 2,9 se tempo = 4:00 ou 4:05h então bolus = 10,0 e rate = 2,5 se dose_prescrita = 12500 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 11,0 e rate = 4,7 se tempo = 3:30h ou 3:35 então Bolus = 11,0 e rate = 4,0 se tempo = 4:00 ou 4:05h então bolus = 11,0 e rate = 3,5 se dose_prescrita = 15000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 13,0 e rate = 5,7 se tempo = 3:30h ou 3:35 então Bolus = 13,0 e rate = 4,9 se tempo = 4:00 ou 4:05h então bolus = 13,0 e rate = 4,3 se dose_prescrita = 30000 então se tempo = 2:00h, 2:05h, 2:30h ou 2:35h então Bolus = volume e rate = '-' se tempo = 3:00h ou 3:05 então Bolus = 23,0 e rate = 12,3 se tempo = 3:30h ou 3:35 então Bolus = 23,0 e rate = 10,6 se tempo = 4:00 ou 4:05h então bolus = 23,0 e rate = 9,3 Atenciosamente,
      Igor
       
    • By devenr
      Estou com dificuldade na criação de uma procedure que receba três valores numéricos e insira um registro na tabela abaixo:
       
       
      TB_MAIORES NUMERO1 Primeiro valor NUMERO2 Segundo valor NUMERO3 Terceiro valor MAIOR Maior valor entre (NUMERO1, NUMERO2 e NUMERO3)
    • By Lucassgso
      Olá pessoal, estou aprendendo agora relacionamentos de tabelas porém tô muito em dúvida, tenho uma pergunta:
      2)Contar quantos alunos existem em cada curso, mostrando o nome do curso e o total de alunos. 
      Estou usando sqldeveloper da oracle!
       
      Como eu faço isso? Vou precisar alguma subquery que faça a contagem antes? Pq eu tentei de várias formas usando JOIN, USING mas acho que estou fazendo algo errado, helllpppp! 
      #######################
       
      Aqui tem a estrutura da tabela pronta caso ajude.
      ####################### Curso Id_Curso – Numérico(6) – Campo Chave Nm_Curso - Varchar2(50) – Obrigatório Ds_Departamento–Varchar2(50) – Obrigatório Aluno Id_RGM – Numérico(6) – Campo Chave Nm_Aluno – Varchar2(50) – Obrigatório Ds_Endereco – Varchar2(50) – Obrigatório Ds_Bairro – Varchar2(50) – Obrigatório Ds_Cidade – Varchar2(50) – Obrigatório ID_CEP – Varchar2(8) – Obrigatório DS_Senha – Varchar2(15) – Obrigatório Id_Curso – Numérico(6) – Obrigatório Empréstimo Id_Emprestimo – Numérico(6) – Campo Chave Nm_Bibliotecario – Varchar2(50) – Obrigatório Dt_Emprestimo – Data – Obrigatório Dt_Devolucao – Data – Obrigatório Dt_Previsao – Data – Obrigatório Id_RGM – Numérico(6) – Obrigatório Itens de Empréstimo Id_Emprestimo – Numérico(6) – Campo Chave Id_Exemplar – Numérico(6) – Campo Chave Id_Livro – Numérico(6) – Campo Chave Ds_observacao – Varchar2(50) Exemplar Id_Exemplar – Numérico(6) – Campo Chave Id_Livro – Numérico(6) – Campo Chave Fl_Situacao – Varchar2(1) Aceitando somente S ou N Livro Id_livro – Numérico(6) – Campo Chave Nm_Livro – Varchar2(50) – Obrigatório Nm_Editora – Varchar2(50) – Obrigatório Nm_Autor – Varchar2(50) – Obrigatório Ds_Volume – Varchar2(50) – Obrigatório Vl_Valor – Numérico(12,2) – Obrigatório OBS.: Elaborar os relacionamentos e regras de constraint.  
    • By Matheus_Moura
      Boa tarde.
      Estou fazendo uma aplicação PHP em um PC Linux com Lubuntu como SO, para conexão com um banco de dados ORACLE 11g. Porém quando utilizo a função oci_connect ou qualquer outra função para oracle é retornado uma mensagem informando que estão indefenidas.
      Estou utilizando o XAMPP como servidor e fiz a configuração no caminho opt/lampp/etc/php.ini retirando o ; tanto no php_oci8.dll como também na php_oracle.dll, porém não obtive sucesso. Coloquei dentro da pasta opt também o instantclient já descompactado e utilizei o PECL para tentar ativar as OCI, porém mesmo assim ainda não consegui sucesso. Alguém teria alguma outra sugestão ?
       
      Att,
      Matheus Moura
    • By guilherme_soi
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver?
       
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver? Existe algo que possa ser feito?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.