mysql版本:x86_64上用于Linux的mysql Ver 8.0.20(MySQL Community Server-GPL)
我的程序:
DELIMITER //
CREATE PROCEDURE InserirMedico(
IN nome varchar(50),
IN sexo char(1),
IN nascimento date,
IN id_horario int,
IN vencimento int)
BEGIN
DECLARE EXIT HANDLER FOR 1062 SELECT 'Duplicate keys error encountered';
DECLARE EXIT HANDLER FOR 1318 SELECT 'Incorrect number of arguments';
DECLARE EXIT HANDLER FOR 1048 SELECT 'Invalid null field';
DECLARE EXIT HANDLER FOR 1452 SELECT 'One or more foreign key constraints failed';
DECLARE EXIT HANDLER FOR 3819 SELECT 'One or more check constraints failed';
DECLARE EXIT HANDLER FOR 1366 SELECT 'One or more columns has a incorrect data type';
INSERT INTO medicos values (null, nome, sexo, nascimento, id_horario, vencimento);
END //
DELIMITER ;
我的问题是,并非所有错误都得到处理。
错误1062、1366、1318没有得到处理,而其他错误却给了我一个错误。
例如,当我尝试为“ vencimento”字段输入无效的“ F”时,会出现此错误。
Error Code: 1366. Incorrect integer value: 'F' for column 'vencimento' at row 1
更新*提供缺少的信息
create table horarios(
id_horario int(3) primary key auto_increment,
hora_inicio time not null,
hora_fim time not null
);
create table medicos(
id_med int primary key auto_increment,
nome varchar(50) not null,
sexo char(1) not null,
data_nasc date not null,
id_horario int not null,
vencimento int not null,
constraint fk_medicos_id_horario foreign key (id_horario) references horarios(id_horario),
constraint CHK_medicos_ven check (vencimento > 0),
constraint CHK_medicos_sexo CHECK (sexo IN('F','M'))
);
测试处理程序
CALL InserirMedico("Mariana Venâncio", 'F', "1990:10:02",2,1000); /*Valid info*/
CALL InserirMedico("Mariana Venâncio", 'F', "1990:10:02",2,'F'); /*Error 1366*/
CALL InserirMedico("Mariana Venâncio", 'F', "1990:10:02",2); /*Error 1318*/
更新2 **
对于错误1062
我有下表
create table tipo_pagamento(
cod_tipo char(1) primary key,
descricao varchar(25) unique not null,
estado bool not null
);
DELIMITER //
CREATE PROCEDURE InserirTipoDePagamento(
IN cod_tipo char(1),
IN descricao varchar(25),
IN estado bool)
BEGIN
DECLARE EXIT HANDLER FOR 1062 SELECT 'Duplicate keys error encountered';
DECLARE EXIT HANDLER FOR 1048 SELECT 'Invalid null field';
INSERT INTO tipo_pagamento VALUES (cod_tipo, descricao, estado);
END //
DELIMITER ;
CALL InserirTipoDePagamento('T', 'Teste', true);
响应:
Error Code: 1062. Duplicate entry 'T' for key 'tipo_pagamento.PRIMARY'