Function no Mysql

30/06/2018

0

Bom Dia,

Perguntinha de Iniciante, rsrsrsrs,
Na criação de
Function no Mysql
só retorna um valor (campo)? Se não, pode me dar um exemplo?

Desde já agradeço.
Dirceu Morais

Dirceu Morais

Responder

Posts

30/06/2018

Raimundo Pereira

Depende do seu result
Responder

30/06/2018

Raimundo Pereira

Array ou record, poderá armazenar mais de um result.
Responder

19/07/2018

Dirceu Morais

No Firebird eu uso a Function assim:

create or alter procedure fn_viagens
(  idata date,
    ilinha integer)
returns (     
    qviagem integer)
as
--Faço a declaração da minhas variaveis
declare variable line integer;
declare variable processou boolean;
declare variable tempo integer;
declare variable km integer;
declare variable ponto varchar(10);
declare variable id_ integer;
begin
   --Atribuo valores as variaveis
    line = 1;
   Processou = False;
   qviagem = 0;
    /* Percorrer o cadastro de viagem */
    For  select viagem_id, km, tempo, pontos from meia_viagem v
         WHERE v.data = :idata and v.linha = ilinha
     into :id, :km, :tempo, :pontos
   do Begin  
       If  line = 1 Then
       Begin
           if (km > 0) and (tempo > 2) Then
           Begin
              qViagem := qViagem + 1;         
              Processou := True;                                                  
           end        
       end
       Else
       begin
           if id_ = 1 Then
           Begin
               if (km > 0) Then
               Begin
                    if ((pontos = 'PT1 - PT1') and
                       (tempo > '00:02:00'))
                       or (pontos <> 'PT1 - PT1') Then
                    Begin
                       qviagem := qviagem + 1;               
                       Processou := True;                                                     
                    end;                            
               end;
            end
            Else if Not Processou and (km> > 0) and (tempo > 2) Then
            Begin
               qviagem := qviagem + 1;         
               Processou := True;                                                            
            end;          
            Ponto := pontos;
       end;
       line = line + 1;
   end;
end


Essa função me retorna a quantidade de viagem realizadas, mas para considerar uma viagem, o tempo tem que ser maior que 2 e id = 1 ou
id > 2

Como eu faço essa mesma função no Mysql?
Responder

19/07/2018

Dirceu Morais

Gente ****AJUDA****

Talvez não seja necessário fazer uma Function.

Vamos ao problema:

Tenho um bloco viagens, onde é registrado o tempo de cada ponto.

Se o tempo total do bloco for menor que 5:00minutos é porque não foi realizado a viagem.

Minha tabela é mais ou menos assim:

|viagem_id|carro|data      |linha|pontos   |inicio**|**fim***|tempo***|bloco|
|        1|74039|2018-05-02|4148 |PT1 - PT2|11:29:28|11:29:38|00:00:10|  648|
|        2|74039|2018-05-02|4148 |PT2 - PT1|11:37:40|12:17:30|00:39:50|  648|
|        3|74039|2018-05-02|4148 |PT1 - PT2|12:18:14|13:02:12|00:43:58|  648|
|        1|80021|2018-05-02|4148 |PT1 - PT2|17:02:48|17:03:00|00:00:12|  792|
|        2|80021|2018-05-02|4148 |PT2 - PT1|17:04:18|17:39:18|00:35:00|  792|
|        3|80021|2018-05-02|4148 |PT1 - PT2|17:40:02|18:24:40|00:44:38|  792|
|        4|80021|2018-05-02|4148 |PT2 - PT2|18:25:56|18:25:56|00:00:00|  792|


Neste exemplo eu teria 2 viagens.

Deu um branco

Socorro.
Responder

20/07/2018

Dirceu Morais

Bom dia povo!!!!!

Com relação a criação da função no mysql continuo "apanhando", mas pelo menos consegui fazer a instrução no sql sem a necessidade da função.

Para quem precisar, vai ai a solução:

select Count(distinct Bloco)
from meia_viagem v
WHERE v.data = :Data and v.linha = :Linha
and v.tempo > '00:05:00'


Ou seja, eu usei o count(Distinct...) ao invés de usar count(*)

Brigadú
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar