我會直接指向這一點。Mysql管理錯誤消息
這是我表
Create Table Beneficios(
IdBeneficio int unsigned primary key auto_increment not null,
Nombre varchar(150)not null,
Estado boolean default true not null,
Descripcion varchar(300)not null,
Tipo enum('Promocio','Descuento','Oferta')
);
和存儲值我決定打電話給一個stored_procedure
create procedure registrarBeneficio(idSucursalLey int unsigned, nombreBeneficio varchar(150), estadoBeneficio boolean, descripcionBeneficio varchar(300), tipoBeneficio enum('Promocion', 'Descuento', 'Oferta'))
begin
DECLARE EXIT HANDLER FOR 1265
begin
SELECT "Beneficio no encontrado" as 'ERROR_NO SQLSTATE';
end;
declare exit handler for sqlexception
begin
rollback;
resignal;
end;
start transaction;
if (tipoBeneficio not in('Promocion','Descuento','Oferta')) then
signal sqlstate '45000' set message_text = 'Beneficio no encontrado', mysql_errno = 1265;
rollback;
end if;
if exists(select nombre from Beneficios where IdSucursal = idSucursalLey) then
insert into Beneficios(IdSucursal, Nombre, Estado, Descripcion, Tipo) values (idSucursalLey, nombreBeneficio, estadoBeneficio, descripcionBeneficio, tipoBeneficio);
commit;
else
signal sqlstate '45000' set message_text = 'Sucursal no encontrada', mysql_errno = 2000;
rollback;
end if;
end$$
當我調用存儲過程我得到以下信息
錯誤代碼:1265.第1行的列'tipoBeneficio'的數據被截斷
然而,什麼我其實想做這是修改該錯誤消息顯示類似 Beneficio沒有Encontrado
我檢查這個環節沒有成功進入解決了我的疑問:https://dev.mysql.com/doc/refman/5.5/en/signal.html
http://www.chriscalender.com/tag/declare-exit-handler-for-sqlexception/
MySQL Stored Procedure Error Handling
請告訴我什麼即時做錯了:(
謝謝!我想可能是你答案的20%。我會改變那:) –