Stored Procedure inclusao_cliente_43
CREATE DEFINER=`root`@`localhost` PROCEDURE `inclusao_cliente_43`(vAluguel VARCHAR(10), vClienteNome VARCHAR(150), vHospedagem VARCHAR(10),
vDataInicio DATE, vDataFinal DATE, vDias INTEGER, vPrecoUnitario DECIMAL(10, 2))
BEGIN
DECLARE vPrecoTotal DECIMAL(10,2);
DECLARE vCliente VARCHAR(10);
SET vPrecoTotal = vDias * vPrecoUnitario;
SELECT cliente_id INTO vCliente FROM clientes WHERE nome = vClienteNome;
INSERT INTO alugueis VALUES (vAluguel, vCliente, vHospedagem, vDataInicio, vDataFinal, vPrecoTotal);
END
stored procedure novoaluguel_43_desafio
USE `insight_places`;
DROP procedure IF EXISTS `insight_places`.`novoaluguel_43_desafio`;
;
DELIMITER $$
USE `insight_places`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `novoaluguel_43_desafio`
(vAluguel varchar(10), vClienteNome varchar(150), vHospedagem varchar(10), vDataInicio date,
vDias INTEGER, vPrecoUnitario decimal(10, 2))
BEGIN
DECLARE vCliente VARCHAR(10);
DECLARE vDataFinal DATE;
DECLARE vNumCliente INTEGER;
DECLARE vPrecoTotal DECIMAL(10,2);
DECLARE vMensagem VARCHAR(100);
DECLARE vErro INT;
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS CONDITION 1 vErro = MYSQL_ERRNO;
IF vErro = 1452 THEN
SET vMensagem = 'Problema de chave estrangeira associado a alguma entidade da base.';
ELSEIF vErro = 1062 THEN
SET vMensagem = 'Registro já existe na base.';
ELSE
SET vMensagem = CONCAT('Erro não mapeado. Código: ', vErro);
END IF;
SELECT vMensagem;
END;
SET vNumCliente = (SELECT COUNT(*) FROM clientes WHERE nome = vClienteNome);
CASE
WHEN vNumCliente = 0 THEN
SET vMensagem = 'Este cliente não está cadastrado na base de dados';
WHEN vNumCliente = 1 THEN
CALL calcula_data_final_43(vDataInicio, vDataFinal, vDias);
CALL inclusao_cliente_43(vAluguel, vClienteNome, vHospedagem, vDataInicio, vDataFinal, vDias, vPrecoUnitario);
SET vMensagem = 'Aluguel incluído com sucesso na base de dados.';
WHEN vNumCliente > 1 THEN
SET vMensagem = 'Este cliente não pode ser usado para incluir o aluguel pelo nome.';
END CASE;
SELECT vMensagem;
END$$
DELIMITER ;