Ver Mensaje Individual
  #3 (permalink)  
Antiguo 14/11/2009, 19:59
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: Ayuda con procedimiento almacenado parametrizado

Ten cuidado con los parámetros.
Los SP en MySQL no admiten, hasta lo que sé, valores TEXT, LOB o BLOB. Además, para poder pasar el nombre de una tabla como parámetro, tienes que usar sentencias preparadas dentro del cuerpo del SP.
El esquema de lo que necesitas andaría por aquí:
Código sql:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE PROCEDURE `dbiglesia`.`sp_AgregarRegistros`
  4.   (IN strTabla VARCHAR(50),
  5.    IN strCampos VARCHAR(250),
  6.    IN strValores VARCHAR(250))
  7. BEGIN
  8.    PREPARE stmt1 FROM 'INSERT INTO ?(?) VALUES(?)';
  9.    SET @a = strTabla;
  10.    SET @b = strCampos;
  11.    SET @c = strValores;
  12.    EXECUTE stmt1 USING @a, @b, @c;
  13.    DEALLOCATE PREPARE stmt1;
  14. END$$
  15.  
  16. DELIMITER ;
Aunque me parece que lo que estás buscando es un método para crear sentencias de inserción en forma dinámica, tanto en lo que al nombre de la tabla se refiere, como en cuanto a los campos y valores.
No me parece una forma eficiente lo que estás haciendo si eso es lo que buscas, porque esas construcciones dinámicas se logran mejor en las aplicaciones. Al menos yo lo hago en VB.Net de esa forma.

Los SP tienen más sentido cuando se trata de tareas repetitivas que se realizan sobre las mismas tablas y valores siempre. Poner a hacer algo tan variable puede eventualmente conspirar contra la seguridad de la base, ya que un SP puede ser ejecutado generalmente por cualquier persona sin privilegios de UPDATE e INSERT, sólo de EXECUTE. Darles la oportunidad de hacerlo como propones puede permitirles afectar tablas que no deberían poder acceder.
__________________
¿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; 14/11/2009 a las 20:04