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

Insertar Null en un FOREING KEY

Estas en el tema de Insertar Null en un FOREING KEY en el foro de Mysql en Foros del Web. Hola. Estoy trabajando un Sistema con Php y MySql, con Procedimientos Almacenados. Tengo un problema al intentar ingresar NULL a un campo FOREING KEY, pero ...
  #1 (permalink)  
Antiguo 26/06/2012, 15:44
 
Fecha de Ingreso: junio-2012
Mensajes: 19
Antigüedad: 11 años, 10 meses
Puntos: 1
Exclamación Insertar Null en un FOREING KEY

Hola.
Estoy trabajando un Sistema con Php y MySql, con Procedimientos Almacenados.
Tengo un problema al intentar ingresar NULL a un campo FOREING KEY, pero me arroja error.
Estoy tratando de hacerlo con Sentencias Preparadas pero me arroja el mismo error, este es el código que manejo.

Código MySQL:
Ver original
  1. DECLARE sentencia VARCHAR(2000);
  2.         DECLARE var_cargo VARCHAR(1000);
  3.         DECLARE var_eliminado VARCHAR(1);
  4.         DECLARE var_emp_id INT;
  5.  
  6.         SET @var_eliminado = '0';
  7.        
  8.         IF p_emp_id = '' THEN
  9.             SET @var_emp_id = 'NULL';
  10.         ELSE
  11.             SET @var_emp_id = p_emp_id;
  12.         END IF;
  13.  
  14.         IF p_cargo = '' THEN
  15.             SET @var_cargo = 'NULL';
  16.         ELSE
  17.             SET @var_cargo = p_cargo;
  18.         END IF;
  19.        
  20.         SET @sentencia = CONCAT('
  21.         INSERT INTO huesped
  22.         (
  23.         huesped.hue_apellidos,
  24.         huesped.hue_nombres,
  25.         huesped.hue_fecha_nac,
  26.         huesped.hue_nacionalidad,
  27.         huesped.hue_profesion,
  28.         huesped.hue_documento,
  29.         huesped.hue_telefono,
  30.         huesped.hue_direccion,
  31.         huesped.hue_cargo,
  32.         huesped.hue_email,
  33.         huesped.emp_id,
  34.         huesped.tdo_id,
  35.         huesped.hue_eliminado
  36.         )
  37.         VALUES
  38.         (
  39.         ',p_apellidos,',
  40.         ',p_nombres,',
  41.         ',p_fecha_nac,',
  42.         ',p_nacionalidad,',
  43.         ',p_profesion,',
  44.         ',p_documento,',
  45.         ',p_telefono,',
  46.         ',p_direccion,',
  47.         ',@var_cargo,',
  48.         ',p_email,',
  49.         ',@var_emp_id,',
  50.         ',p_tdo_id,',
  51.         ',@var_eliminado,'
  52.         )');
  53.  
  54.         PREPARE consulta FROM @sentencia;
  55.         EXECUTE consulta;
  56.         DEALLOCATE PREPARE consulta;

Si alquien me puede ayudar se lo agradecere mucho.
Gracias de antemano.
  #2 (permalink)  
Antiguo 26/06/2012, 16:35
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: Insertar Null en un FOREING KEY

Buenas,

No nos indicas que error te marca y con eso podríamos descartar muchas cosas.

Lo primero que se me ocurre es que al campo de la foreign key que intentas poner a null, le hayas puesto que no permita valores null (eso depende de como hayas creado la tabla).

Si especificas el error que te da podremos ayudarte mejor.

Saludos.
  #3 (permalink)  
Antiguo 26/06/2012, 17:16
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, 4 meses
Puntos: 2658
Respuesta: Insertar Null en un FOREING KEY

El código que pones está incompleto y parece haber una confusión en el uso de las variables.
Acuérdate que no estás trabajando en SQL Server. Una variable var y @var, son dos variables diferentes.

Acá puedes ver el caso:
Código MySQL:
Ver original
  1. DECLARE sentencia VARCHAR(2000);
  2.         DECLARE var_cargo VARCHAR(1000);
  3.         DECLARE var_eliminado VARCHAR(1);
  4.         DECLARE var_emp_id INT;
  5.  
  6.         SET @var_eliminado = '0';
  7.        
  8.         IF p_emp_id = '' THEN
  9.             SET @var_emp_id = 'NULL';
  10.         ELSE
  11.             SET @var_emp_id = p_emp_id;
  12.         END IF;
  13.  
  14.         IF p_cargo = '' THEN
  15.             SET @var_cargo = 'NULL';
  16.         ELSE
  17.             SET @var_cargo = p_cargo;
  18.         END IF;


Además, hay algunas otras consideraciones:
1) Las variables con "@" son variables de sesión y su valor es NULL hasta ser inicalizadas, por lo que no sirven para comparaciones antes de eso.
2) NULL y 'NULL' son cosas diferentes. Uno es un estado, el otro es una cadena de texto.
3) Si p_cargo (que no sabemos de donde viene) es NULL,
Código MySQL:
Ver original
  1. DECLARE var_emp_id INT;
  2.  
  3.         IF p_emp_id = '' THEN
  4.             SET @var_emp_id = 'NULL';
  5.         ELSE
  6.             SET @var_emp_id = p_emp_id;
  7.         END IF;
saldrá por el ELSE, porque no es lo mismo un espacio vacío que NULL.

Por favor, postea todo el cuerpo del código, sin recortar, y explicanos qué error te da.
__________________
¿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; 26/06/2012 a las 18:36

Etiquetas: sql
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 20:01.