Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

error en columna o algo asi....

Estas en el tema de error en columna o algo asi.... en el foro de Bases de Datos General en Foros del Web. hola tengo una tabla donde quisiera guardar los datos de los mensajes de un contacto en la web esta es: create table mensaje_contacto ( msg_contacto_id ...
  #1 (permalink)  
Antiguo 01/12/2008, 15:21
Avatar de cesarpunk  
Fecha de Ingreso: enero-2008
Ubicación: Lima
Mensajes: 943
Antigüedad: 16 años, 3 meses
Puntos: 9
error en columna o algo asi....

hola tengo una tabla donde quisiera guardar los datos de los mensajes de un contacto en la web esta es:

create table mensaje_contacto (
msg_contacto_id int(5) not null auto_increment,
msg_contacto_estado bit not null,
msg_contacto_nombre varchar(200) not null,
msg_contacto_apellido varchar(200) not null,
msg_contacto_documento varchar(50) not null,
msg_contacto_email varchar(100) not null,
msg_contacto_telefono varchar(35) not null,
msg_contacto_telefono2 varchar(35) not null,
msg_contacto_direccion varchar(100) not null,
msg_contacto_tipo_mensaje varchar(20) not null,
msg_contacto_mensaje longtext not null,
msg_contacto_fecha datetime not null,
primary key (msg_contacto_id)
)

ahora hago en la bd de mysql un procedimiento almacenado que lo guarda

DELIMITER $$
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 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 ;

----como el id es autoincrement no lo pongo en el proc normal, pero cuando quiero ejecutar o llamar a ese procedimiento me sale un error:

call envia_contacto('0','xxxx','xxxx','123456','xxxx@ho tmail.com','12345',' ','casa','consulta','hola','2008-12-01')

error: Column count doesn't match value count at row 1



A que se debe? porque todos los valores que pongo son los mismos que en los que estan en el proc

Última edición por cesarpunk; 01/12/2008 a las 15:39
  #2 (permalink)  
Antiguo 02/12/2008, 04:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error en columna o algo asi....

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 original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS `envia_contacto`$$
  3. CREATE PROCEDURE `envia_contacto`(
  4. d_contacto_estado bit,
  5. d_contacto_nombre VARCHAR(200),
  6. d_contacto_apellido VARCHAR(200),
  7. d_contacto_documento VARCHAR(50),
  8. d_contacto_email VARCHAR(100),
  9. d_contacto_telefono VARCHAR(35),
  10. d_contacto_telefono2 VARCHAR(35),
  11. d_contacto_direccion VARCHAR(100),
  12. d_contacto_tipo_mensaje VARCHAR(20),
  13. d_contacto_mensaje longtext,
  14. d_contacto_fecha datetime)
  15.  
  16. BEGIN
  17.  
  18. INSERT INTO mensaje_contacto(
  19.   msg_contacto_estado,
  20.   msg_contacto_nombre,
  21.   msg_contacto_apellido,
  22.   msg_contacto_documento,
  23.   msg_contacto_email,
  24.   msg_contacto_telefono,
  25.   msg_contacto_telefono2,
  26.   msg_contacto_direccion,
  27.   msg_contacto_tipo_mensaje,
  28.   msg_contacto_mensaje,
  29.   msg_contacto_fecha)
  30. VALUES(
  31.   d_contacto_estado,
  32.   d_contacto_nombre,
  33.   d_conta cto_apellido,
  34.   d_contacto_documento,
  35.   d_contacto_email ,
  36.   d_contacto_telefono,
  37.   d_contacto_telefono2,
  38.   d_contac to_direccion,
  39.   d_contacto_tipo_mensaje,
  40.   d_contacto_me nsaje,
  41.   d_contacto_fecha);
  42. END$$
  43. 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.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 02/12/2008 a las 04:31
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:55.