Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/01/2009, 07:30
julms
 
Fecha de Ingreso: noviembre-2008
Mensajes: 74
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problemilla cuando creas una tabla temporal en un procedimiento y lo ejecu

Claro, es que yo pensaba que se iba a comportar como una variable, que cada vez que llamas al procedimiento seria como crear un proceso nuevo, y con las variables vacias (y las tablas).

Creo que no me explico bien :(. El error esta en la linea del INSERT linea DENTRO del SP donde se define la tabla temporal:

CREATE TEMPORARY TABLE idsHer (
idHerramienta INT PRIMARY KEY
);
INSERT INTO idsHer VALUES (idHer);
SET rows = ROW_COUNT();
WHILE rows > 0 DO
INSERT IGNORE INTO idsHer
SELECT DISTINCT Herramientas_idHerramientaNecesaria
FROM Herramientas AS e
INNER JOIN idsHer AS p ON e.idHerramienta = p.idHerramienta WHERE Herramientas_idHerramientaNecesaria IS NOT NULL;
SET rows = ROW_COUNT();
END WHILE;

Quizas esa operacion no se pueda realizar como quiero. Se supone que quiero que en idsHer esten los id de una relacion recursiva. Por ej:
herramienta herramienta-padre
1 NULL
2 1
3 2
4 NULL

Al llamar a este SP me devuelve:
CALL sp(3): CALL sp(2): CALL sp(4):
3 2 4
2 1
1

De momento creando una tabla normal me funciona, pero el problema es que al hacer varias CALL sp, CALL sp, CALL sp, CALL sp... a la vez, como me has dicho comparte la tabla idsh, vamos que es una tabla mas, y no vale. Hasta ahora la creaba siempre al principio y luego la borraba pero claro, segun lo que veo esta mal el planteamiento.

Concluyendo: Con una tabla normal, me falla al ejecutar dos veces a la vez el SP, con una tabla temporal, la consulta dentro del while no va. Hare algunas pruebas mas a ver...

¡Al final lo hago en php!jeje. Gracias por tu paciencia.

Saludos