A que cuando insertas un registro usando menos campos de lso que existen en la tabla (incluyendo los autoincrement), debes declarar todos los campos que vas a cargar:
Código sql:
Ver originalDELIMITER $$
DROP PROCEDURE IF EXISTS `envia_contacto`$$
CREATE PROCEDURE `envia_contacto`(
d_contacto_estado bit,
d_contacto_nombre VARCHAR(200),
d_contacto_apellido VARCHAR(200),
d_contacto_documento VARCHAR(50),
d_contacto_email VARCHAR(100),
d_contacto_telefono VARCHAR(35),
d_contacto_telefono2 VARCHAR(35),
d_contacto_direccion VARCHAR(100),
d_contacto_tipo_mensaje VARCHAR(20),
d_contacto_mensaje longtext,
d_contacto_fecha datetime)
BEGIN
INSERT INTO mensaje_contacto(
msg_contacto_estado,
msg_contacto_nombre,
msg_contacto_apellido,
msg_contacto_documento,
msg_contacto_email,
msg_contacto_telefono,
msg_contacto_telefono2,
msg_contacto_direccion,
msg_contacto_tipo_mensaje,
msg_contacto_mensaje,
msg_contacto_fecha)
VALUES(
d_contacto_estado,
d_contacto_nombre,
d_conta cto_apellido,
d_contacto_documento,
d_contacto_email ,
d_contacto_telefono,
d_contacto_telefono2,
d_contac to_direccion,
d_contacto_tipo_mensaje,
d_contacto_me nsaje,
d_contacto_fecha);
END$$
DELIMITER ;
El ID no va, porque es un auto_increment, pero precisamente porque estás omitiendo uno, es que
tienes que poner todos los demás.
Esto es una regla general del SQL, no es única en MySQL. Oracle también exige lo mismo.