Olá Denis ,grato pelo retorno, ainda não funcionou, simplesmente não retorna nada e também não insere, realizei mudanças apenas na variavel mensagem ,
CREATE DEFINER=`root`@`localhost` PROCEDURE `verificapagamento`(IN pinfcodigo INT, IN ppagcodigo INT, IN pvencodigo INT, IN pvalor DOUBLE)
BEGIN
DECLARE valorvenda DOUBLE;
DECLARE somavalores DOUBLE;
DECLARE msg VARCHAR(1000) DEFAULT "sem mensagem";
DECLARE excecao SMALLINT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET excecao = 1;
SELECT venvalortotal INTO valorvenda FROM venda WHERE vencodigo = pvencodigo;
SELECT COALESCE(SUM(valor),0) INTO somavalores FROM informaformapgto WHERE vencodigo = pvencodigo;
IF somavalores > valorvenda THEN
SET msg = "Valor não confere";
SELECT msg AS msg;
ELSE
START TRANSACTION;
INSERT INTO informaformapgto(infcodigo, pagcodigo, vencodigo, valor)
VALUES (pinfcodigo, ppagcodigo, pvencodigo, pvalor);
IF excecao = 1 THEN
SET msg = "Erro na gravação";
ROLLBACK;
ELSE
SET msg = "Gravado com sucesso";
COMMIT;
END if;
END if;
SELECT msg AS msg;
END
Vou colocar aqui um exemplo do banco para que possa me ajudar:
create database verif_valores;
use verif_valores;
create table venda(
vencodigo int not null auto_increment primary key,
vendata date not null,
venvalortotal double);
create table formapagamento(
pagcodigo int not null auto_increment primary key,
pagdescrição varchar(8) not null);
create table informaformapgto(
infcodigo int not null,
pagcodigo int not null,
vencodigo int not null,
valor double not null,
constraint pk_informafpgto primary key (infcodigo),
constraint fk_infpgto_pgto foreign key(pagcodigo)
references formapagamento (pagcodigo) match simple
on update restrict on delete restrict,
constraint fk_infpgto_venda foreign key(vencodigo)
references venda (vencodigo) match simple
on update restrict on delete restrict);
insert into venda (vencodigo,vendata,venvalortotal) values
(1,'2017-06-13',500);
insert into formapagamento (pagcodigo,pagdescrição) values
(1,'Dinheiro'),
(2,'Débito'),
(3,'Crédito');
insert into informaformapgto (infcodigo,pagcodigo,vencodigo,valor) values
(1,1,1,300);
Att