How to create a function that returns the lowest expiration date between batches of a given product?

Asked

Viewed 582 times

1

How I create a function that returns the shortest expiration date between batches of a particular product?

Dry my SQL code:

create database Exemplo;

use Exemplo;
create table produto
(codProduto integer not null,
 nomeProduto varchar(50) not null,
 marca varchar(50) not null,
 precoCusto decimal(15,2) not null,
 precoVenda decimal(15,2) not null,
 primary key (codProduto)); 

 create table loteproduto
 (codProduto integer not null,
  codLote integer not null,
  nuLote char(10) not null,
  dtValidade date,
  primary key (codProduto, codLote),
  foreign key (codProduto) references produto(codProduto));

insert into produto (codProduto, nomeProduto, Marca, precoCusto, precoVenda) 
values (1, 'Inseticida 500 ML', 'SBP',4,7),
       (2, 'Pastilha refil', 'SBP', 2,4),
       (3, 'Refrigerante guaraná', 'Pureza', 3,5),    
       (4, 'Refrigerante laranja', 'Pureza', 3,5),
       (5, 'Amaciante amarelo', 'Downy', 6,9),
       (6, 'Amaciante rosa', 'Downy', 4,5),
       (7, 'Frango', 'Sadia', 5,10),
       (8, 'Peru', 'Sadia', 5,10);

insert into loteproduto (codProduto, codLote, nuLote, dtValidade) 
values (1, 1, '399A',null),
       (1, 2, '323A','2012-12-31'),
       (2, 1, 'EF2A','2012-12-30'),
       (7, 1, 'EF3A',null);

2 answers

1

Logically you need to return this (and filter if necessary by parameters) or a record or table as below:

  DROP PROCEDURE IF EXISTS `ObterLoteMinimo`;
  CREATE PROCEDURE `ObterLoteMinimo`(IN inCodigoProduto integer, IN inCodLote integer)

  -- por produto e lote
  select
       codProduto,
       codLote,
       min(dtValidade)
  from
       loteproduto
  where
       codLote = inCodLote,
       codProduto = inCodigoProduto 
  group by
        codProduto, codLote;
  • I would like to do this through a create Function

  • @Jarwin I’m more used to the syntax of SQL Server, but I believe this should be enough to use with php.

0

Using function:

delimiter $
create function getMenorDataValidade(p_codProduto integer) returns date
begin
    return (select min(loteproduto.dtValidade)
            from loteproduto
            where loteproduto.codProduto = p_codProduto);
end
$ delimiter ;

Browser other questions tagged

You are not signed in. Login or sign up in order to post.