Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/07/2012, 09:27
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: problema SP, con un IN dentro de un cursor

Primero: Las cadenas de texto se encierran entre apóstrofes. Los acentos inversos (`) son para los nombres de las tablas, bases, columnas y todo objeto creado por una sentencia DDL.
Segundo: IN() se usa para comparar un valor contra una lista de valores, pero cuando envías esto:
Código MySQL:
Ver original
  1. all spTest('10,11,12')
No estás enviando una lista de valores, sino una cadena de texto que contiene valores separados por comas, pero en esencia es un sólo valor, y no tres.
En tu caso, lo que debes hacer es comparar el valor buscado contra la lista contenida en la cadena, y para eso no sirve el IN(). Se debe usar una función de cadena denominada FIND_IN_SET():
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `spListPrice`(
  4.         IN idInstrument VARCHAR(500),
  5.         IN quality CHAR(3)
  6.     )
  7.     DECLARE valores VARCHAR(500);
  8.     DECLARE queryt VARCHAR(1000);
  9.     DECLARE _pkIntradayTransaction INTEGER;
  10.     DECLARE done INT DEFAULT 0;
  11.     DECLARE cTag CURSOR FOR
  12.         SELECT
  13.             max(pkIntradayTransaction)
  14.         FROM
  15.             tbIntradayTransactions
  16.         WHERE
  17.             fkInstrument IN (SELECT
  18.                 pkInstrument
  19.             FROM
  20.                 tbInstruments
  21.             WHERE
  22.                 (FIND_IN_SET (fkInstrument , valores)>0)
  23.               AND datetimeLastPrice <= DATE_SUB(NOW(),INTERVAL 15 MINUTE)
  24.         GROUP BY fkInstrument;
  25.  
  26.         DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  27.     -- El resto del codigo
  28.  
  29. DELIMITER;
De todos modos, para el caso específico, es mejor usar sentencias preparadas y no un parámetro de cadena de este modo. Pero sin saber cómo es el resto del proceso, no estoy muy seguro de lo que conviene hacer.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)