Boa noite pessoal, estou desenvolvendo um projeto de um banco de dados(Só estudando mesmo, não é um hotel real) para um hotel, e preciso da ajuda de vocês…
A situação é a seguinte:
Eu preciso chamar uma procedure dentro de uma trigger, e colocar o valor dessa procedure em uma variável para poder dar um update em um campo da tabela…
A tabela em questão, é a tabela aluguel, que tem um campo com o nome de “despesas_totais”. Esse campo irá ser preenchido depois que o cliente der checkout no hotel, ou seja, quando o new.data_saida dele na tabela aluguel não for nulo. Assim que ele der checkout todas as despesas durante aquele período serão somadas e esta soma irá para o tal campo “despesas_totais”… Existe uma tabela de despesa que tem os campos id_despesa, descricao_despesa e valor_despesa, para poder identificar o valor de cada despesa que o hotel oferece separadamente. E existe uma tabela que é um produto de N:N da tabela aluguel para a tabela despesas, que tem como intuito gravar e identificar qual despesa foi consumida por qual cliente e qual o quarto e a data de entrada desse cliente no hotel…
Essa tabela N:N entre aluguel e despesas é denominada aluguel_despesas , e tem como chaves primárias o id_despesa (da tabela despesas), o id_cliente (da tabela aluguel), o o id_quarto (da tabela aluguel) e a data_entrada(da tabela aluguel, e que é de tipo datetime).
A procedure está funcionando corretamente, de acordo com os parâmetros que eu passo…
segue a procedure:
DROP PROCEDURE IF EXISTS Despesas_por_id_SP;
DELIMITER $$
// Aqui eu passarei como parâmetro o id do cliente, e a data em que ele entrou no hotel
CREATE PROCEDURE Despesas_por_id_SP (IN id_cliente INT, IN data_aluguel DATETIME)
BEGIN
SELECT sum(despesas.valor_despesa)
FROM despesas,aluguel_despesas,aluguel
WHERE aluguel.id_cliente = aluguel_despesas.id_cliente
AND aluguel.data_entrada = aluguel_despesas.data_entrada
AND aluguel.id_quarto = aluguel_despesas.id_quarto
AND aluguel_despesas.id_despesa = despesas.id_despesa
//Passando os parâmetros
AND (aluguel.id_cliente = id_cliente)
AND (aluguel.data_entrada = data_aluguel);
END $$
DELIMITER ;
COMMIT
Eu preciso passar o Resultado dessa procedure em uma variável para a seguinte trigger:
DELIMITER //
DROP TRIGGER IF EXISTS `hotel`.`Controle_Despesas_TR`;
CREATE TRIGGER `hotel`.`Controle_Despesas_TR`
AFTER UPDATE ON hotel.alg_aluguel_tb
FOR EACH ROW
BEGIN
// Preciso passar o valor da procedure para essa variável:
DECLARE Despesas_Cliente double;
// Estava tentando passar da seguinte forma (está dando erro...)
CALL Despesas_por_id_SP(aluguel.id_cliente, aluguel.data_entrada)
INTO Despesas_Cliente;
IF(new.data_saida IS NOT NULL) THEN
UPDATE aluguel
SET new.despesas_totais = Despesas_Cliente ;
END IF;
END;
//
Minha dúvida é especificamente neste trecho:
CALL Despesas_por_id_SP(aluguel.id_cliente, aluguel.data_entrada)
INTO Despesas_Cliente;
Como é a sintaxe certa para chamar uma stored procedure dentro de uma trigger e armazenar o valor dela em uma variável declarada na própria trigger?
Desde já agradeço pela atenção.
Abçs;