sou novo em mysql, estou criando uma stored procedure. e tendo chamar ela na tringger só que da erro
CREATE DEFINER=`root`@`localhost` PROCEDURE `cnh_testes`( in v_veiculo int, in v_data_reserva date,in v_hora_reserva time,
in v_previsao_volta date,in v_previsao_hora time,in v_destino int,in v_obs varchar(255),in v_condutor_id int)
BEGIN
declare v_validacnh INT;
select c.id_condutor into v_validacnh from condutor c
inner join veiculo v on v.Id_cnh = c.id_cnh
where c.vencimento_cnh <= current_date() and c.id_condutor = c.id_condutor;
if v_validacnh = v_condutor_id then
rollback;
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'CNH VENCIDA OU CNH NÃO PERMITIDA PARA ESSE VEICULO';
else
insert INTO RESERVA (veiculo,data_reserva,hora_reserva,previsao_volta,previsao_hora,destino,obs,condutor_id )
values(v_veiculo,v_data_reserva,v_hora_reserva,v_previsao_volta,v_previsao_hora,v_destino,v_obs,v_condutor_id );
end if;
END
*********aqui chamo ela na trigger************ CREATE DEFINER=`root`@`localhost` TRIGGER `testecarros`.`teste_BEFORE_INSERT` BEFORE INSERT ON `reserva` FOR EACH ROW
BEGIN
call cnh_testes (new.veiculo,new.data_reserva,new.hora_reserva,new.previsao_volta,new.previsao_hora,new.destino,new.obs,new.condutor_id );
END
***************erro que me retorna quando faço a inserção**********************************************
Pergunta
Daniel Rocha
sou novo em mysql, estou criando uma stored procedure. e tendo chamar ela na tringger só que da erro
CREATE DEFINER=`root`@`localhost` PROCEDURE `cnh_testes`( in v_veiculo int, in v_data_reserva date,in v_hora_reserva time,
in v_previsao_volta date,in v_previsao_hora time,in v_destino int,in v_obs varchar(255),in v_condutor_id int)
BEGIN
declare v_validacnh INT;
select c.id_condutor into v_validacnh from condutor c
inner join veiculo v on v.Id_cnh = c.id_cnh
where c.vencimento_cnh <= current_date() and c.id_condutor = c.id_condutor;
if v_validacnh = v_condutor_id then
rollback;
SIGNAL SQLSTATE '02000' SET MESSAGE_TEXT = 'CNH VENCIDA OU CNH NÃO PERMITIDA PARA ESSE VEICULO';
else
insert INTO RESERVA (veiculo,data_reserva,hora_reserva,previsao_volta,previsao_hora,destino,obs,condutor_id )
values(v_veiculo,v_data_reserva,v_hora_reserva,v_previsao_volta,v_previsao_hora,v_destino,v_obs,v_condutor_id );
end if;
END
*********aqui chamo ela na trigger************
CREATE DEFINER=`root`@`localhost` TRIGGER `testecarros`.`teste_BEFORE_INSERT` BEFORE INSERT ON `reserva` FOR EACH ROW
BEGIN
call cnh_testes (new.veiculo,new.data_reserva,new.hora_reserva,new.previsao_volta,new.previsao_hora,new.destino,new.obs,new.condutor_id );
END
***************erro que me retorna quando faço a inserção**********************************************
Not allowed to returna result set a tringger
como resolvo isto?
*******************************************************************
assim quero fazer essa validação no banco - (ai eu valido se a cnh esta vencida antes de inseri)
(antes de fazer (inseri )quero validar algumas situações )
1- se o condutor esta com a cnh vencida- que é a procedure acima
2- se o condutor pode dirigir o veiculo - se cnh do condutor e igual ou maior veiculo do
3- condutor não pode fazer reserva se o veiculo estiver reservado naquele horário ou entre hora de retorno
tenho essa tabelas
CREATE TABLE `cnh` (
`Id_cnh` int(11) NOT NULL AUTO_INCREMENT,
`cnh_nome` char(2) DEFAULT NULL,
PRIMARY KEY (`Id_cnh`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1;
************************
CREATE TABLE `cidade` (
`id_cidade` int(11) NOT NULL AUTO_INCREMENT,
`Cidade` varchar(50) DEFAULT NULL,
`uf` int(11) DEFAULT NULL,
PRIMARY KEY (`id_cidade`),
KEY `uf` (`uf`),
CONSTRAINT `cidade_ibfk_1` FOREIGN KEY (`uf`) REFERENCES `uf` (`id_uf`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1;
************************
CREATE TABLE `condutor` (
`id_condutor` int(11) NOT NULL AUTO_INCREMENT,
`nome_condutor` varchar(80) DEFAULT NULL,
`id_departamento` int(11) DEFAULT NULL,
`vencimento_cnh` date DEFAULT NULL,
`telefone` varchar(11) DEFAULT NULL,
`emai` varchar(80) DEFAULT NULL,
`id_cnh` int(11) DEFAULT NULL,
PRIMARY KEY (`id_condutor`),
KEY `id_departamento` (`id_departamento`),
KEY `id_cnh` (`id_cnh`),
CONSTRAINT `condutor_ibfk_1` FOREIGN KEY (`id_departamento`) REFERENCES `departamento` (`id_departamento`),
CONSTRAINT `condutor_ibfk_2` FOREIGN KEY (`id_cnh`) REFERENCES `cnh` (`Id_cnh`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
************************
CREATE TABLE `veiculo` (
`id_veiculo` int(11) NOT NULL AUTO_INCREMENT,
`tipo_veiculo` int(11) DEFAULT NULL,
`placa` char(7) DEFAULT NULL,
`cor` varchar(20) DEFAULT NULL,
`km_veiculo_inical` int(11) DEFAULT NULL,
`id_cnh` int(11) DEFAULT NULL,
PRIMARY KEY (`id_veiculo`),
KEY `tipo_veiculo` (`tipo_veiculo`),
KEY `id_cnh` (`id_cnh`),
CONSTRAINT `veiculo_ibfk_1` FOREIGN KEY (`tipo_veiculo`) REFERENCES `tipoveiculo` (`id_tipoveiculo`),
CONSTRAINT `veiculo_ibfk_2` FOREIGN KEY (`id_cnh`) REFERENCES `cnh` (`Id_cnh`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=latin1;
************************
CREATE TABLE `reserva` (
`id_reseva` int(11) NOT NULL AUTO_INCREMENT,
`veiculo` int(11) DEFAULT NULL,
`data_reserva` date DEFAULT NULL,
`hora_reserva` time DEFAULT NULL,
`previsao_volta` date DEFAULT NULL,
`previsao_hora` time DEFAULT NULL,
`destino` int(11) DEFAULT NULL,
`cancela` char(1) DEFAULT NULL,
`baixar_reserva` int(11) DEFAULT NULL,
`obs` varchar(255) DEFAULT NULL,
`condutor_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id_reseva`),
KEY `veiculo` (`veiculo`),
KEY `destino` (`destino`),
KEY `baixar_reserva` (`baixar_reserva`),
KEY `condutor_id` (`condutor_id`),
CONSTRAINT `reserva_ibfk_1` FOREIGN KEY (`veiculo`) REFERENCES `veiculo` (`id_veiculo`),
CONSTRAINT `reserva_ibfk_2` FOREIGN KEY (`destino`) REFERENCES `cidade` (`id_cidade`),
CONSTRAINT `reserva_ibfk_3` FOREIGN KEY (`baixar_reserva`) REFERENCES `tipobaixa` (`id_tipo_baixa`),
CONSTRAINT `reserva_ibfk_4` FOREIGN KEY (`condutor_id`) REFERENCES `condutor` (`id_condutor`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
************************
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.