Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/01/2013, 03:43
Avatar de gnzsoloyo
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: Negar consulta

Primero, est´s complicando innecesariamente ese SP. No necesitas dos sentencias y la variable para lo que haces, sino sólo una:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS sp_reservarcitas$$
  3. CREATE PROCEDURE sp_reservarcitas()
  4.     select id_horario, tipo_horario
  5.     from tbl_horarios
  6.     where id_horario IN(select id_horario from tbl_citas where fecha_cita = '2013-01-10');
  7. END$$

Que también se puede escribir:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS sp_reservarcitas$$
  3. CREATE PROCEDURE sp_reservarcitas()
  4.     SELECT  H.id_horario, H.tipo_horario
  5.     FROM tbl_horarios H LEFT JOIN tbl_citas C ON H.id_horario = C.id_horario;
  6. END$$

Y para negarlo sería:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS sp_reservarcitas$$
  3. CREATE PROCEDURE sp_reservarcitas()
  4.     select id_horario, tipo_horario
  5.     from tbl_horarios
  6.     where id_horario NOT IN(select id_horario from tbl_citas where fecha_cita = '2013-01-10');
  7. END$$
o bien:
Código MySQL:
Ver original
  1. DELIMITER $$
  2. DROP PROCEDURE IF EXISTS sp_reservarcitas$$
  3. CREATE PROCEDURE sp_reservarcitas()
  4.     SELECT  H.id_horario, H.tipo_horario
  5.     FROM tbl_horarios H LEFT JOIN tbl_citas C ON H.id_horario = C.id_horario
  6.     WHERE C.id_horario IS NULL;
  7. END$$

Nota final: en tu SP, "name" y "@name" son dos variables diferentes.
Las variables locales se declaran y se usan sin "@".
Las variables con "@" son variables de tipo sesión, que no se declaran sino que se incializan, y su valor inicial es NULL.
En tu caso está funcionando porque el primer SELECT la está inicializando con un valor dado, pero eso significa que la "name" es inútil.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)