CRIAR PROCEDURE: inclusao_aluguel_43
CREATE DEFINER=root@localhost PROCEDURE inclusao_aluguel_43(vReserva VARCHAR(10),
vCliente VARCHAR(10), vHospedagem VARCHAR(10), vDataInicio DATE, vDataFinal DATE, vDias INT,
vPrecoUnitario DECIMAL(10,2))
BEGIN
DECLARE vPrecoTotal DECIMAL(10,2);
SET vPrecoTotal = vDias * vPrecoUnitario;
INSERT INTO reservas VALUES (vReserva, vCliente, vHospedagem, vDataInicio,
vDataFinal, vPrecoTotal);
END
Chamando a PROCEDURE por meio da CALL dentro da Procedure:
USE insight_places;
DROP procedure IF EXISTS insight_places.novoAluguel_44;
DELIMITER $$
USE insight_places$$
CREATE DEFINER=root@localhost PROCEDURE novoAluguel_44
(vReserva VARCHAR(10), vClienteNome VARCHAR(150), vHospedagem VARCHAR(10),
vDataInicio DATE, vDias INT, vPrecoUnitario DECIMAL(10,2))
BEGIN
DECLARE vCliente VARCHAR(10);
DECLARE vDataFinal DATE;
DECLARE vNumClientes INT;
DECLARE vPrecoTotal DECIMAL(10,2);
DECLARE vMensagem VARCHAR (100);
DECLARE EXIT HANDLER FOR 1452
BEGIN
SET vMensagem = 'Problema de chave estrangeira associado a alguma entidade da base.';
SELECT vMensagem;
END;
SET vNumClientes = (SELECT COUNT(*) FROM CLIENTES WHERE nome = vClienteNome);
CASE
WHEN vNumClientes = 0 THEN
SET vMensagem = 'Este cliente nao esta na base de dados.';
SELECT vMensagem;
WHEN vNumClientes = 1 THEN
SELECT cliente_id INTO vCliente FROM clientes WHERE nome = vClienteNome;
CALL CalculaDataFinal_43 (vDataInicio, vDataFinal, vDias);
CALL inclusao_aluguel_43 (vReserva, vCliente, vHospedagem, vDataInicio, vDataFinal, vDias, vPrecoUnitario);
SET vMensagem = 'Aluguel incluído na base com sucesso.';
SELECT vMensagem;
WHEN vNumClientes > 1 THEN
SET vMensagem = 'Mais de um cliente com esse mesmo nome na base.';
SELECT vMensagem;
END CASE;
END$$
DELIMITER ;
**