Function no Mysql

MySQL

Delphi

Banco de Dados

30/06/2018

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

Curtidas 0

Respostas

Raimundo Pereira

Raimundo Pereira

30/06/2018

Depende do seu result
GOSTEI 0
Raimundo Pereira

Raimundo Pereira

30/06/2018

Array ou record, poderá armazenar mais de um result.
GOSTEI 0
Dirceu Morais

Dirceu Morais

30/06/2018

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?
GOSTEI 0
Dirceu Morais

Dirceu Morais

30/06/2018

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.
GOSTEI 0
Dirceu Morais

Dirceu Morais

30/06/2018

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ú
GOSTEI 0
POSTAR