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

Tabla como parametro en stored procedure

Estas en el tema de Tabla como parametro en stored procedure en el foro de Bases de Datos General en Foros del Web. Hola, existe alguna forma de enviar tablas como parámeros en procedimientos almacenados, en mysql??? O quizas acceder a las tablas por medio de algún índice ...
  #1 (permalink)  
Antiguo 06/12/2010, 19:34
 
Fecha de Ingreso: diciembre-2008
Ubicación: Lima - Perú
Mensajes: 187
Antigüedad: 15 años, 11 meses
Puntos: 3
Pregunta Tabla como parametro en stored procedure

Hola, existe alguna forma de enviar tablas como parámeros en procedimientos almacenados, en mysql???

O quizas acceder a las tablas por medio de algún índice que las identifique en la base de datos, con el fin de no enviar la tabla como parametro sino aquel índice que la identifica. En pseudocodigo sería algo asi.

Código:
create procedimiento_almacenado(indice_tabla int)
BEGIN
     insert into tablas_de_la_bd(indice_tabla ) (campo) values ('registro')
END

call  procedimiento_almacenado(1);
  #2 (permalink)  
Antiguo 07/12/2010, 09:26
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Tabla como parametro en stored procedure

Que es lo que quieres hacer? a que te refieres cuando dices indice, a mandar el id de una tabla?

Saludos!
  #3 (permalink)  
Antiguo 07/12/2010, 12:06
 
Fecha de Ingreso: diciembre-2008
Ubicación: Lima - Perú
Mensajes: 187
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Tabla como parametro en stored procedure

Hola, cuando digo indice me refiero a un numero entero, lo que quiero es acceder a cualquier tabla desde el stored procedure, entonces por eso quiero saber como mandar la tabla como parametro o su id o l oque sea.

Y mencione lo del indice porque quizas exista una forma de acceder a las tablas de una base de datos mediante algún índice que la identifique, como si se tratara de un Array, el 0 y 1 son los índices del primer y segundo elemento respectivamente, pienso que quizas se puede acceder a las tablas de la base de datos también por medio de índices. Y si no es posible quisiera saber de que otra forma podría acceder a la tabla desde el stored procedure.

Gracias
  #4 (permalink)  
Antiguo 07/12/2010, 12:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Tabla como parametro en stored procedure

Las tablas no se numeran en MySQL (o en ningún otro DBMS). En este sentido tienes que dejar de lado los conceptos de programación y tratar de entender cómo se estructuran e identifican los objetos de base de datos.
Las tablas, bases, campos, funciones, índices, procedimientos, triggers, etc., se identifican sólo por sus nombres. Los números de índice que pueden poseer dentro de ciertas consultas sólo tienen existencia dentro de esa consulta y no identifican físicamente nada más.
El único modo que MySQL admite para llamar a una tabla dentro de un SP es por su nombre. Nada más. Esto implica que no se puede llamar directamente una tabla usando la cadena de texto que pueda pasarte como parámetro; al menos no estrictamente como tu lo entiendes:

Código MySQL:
Ver original
  1. CREATE PROCEDURE leertabla(IN tabla VARCHAR(100), IN campo VARCHAR(50), IN valor INT)
  2.      INSERT INTO tabla(campo) VALUES(valor);

No puedes hacerlo así porque en ese contexto "tabla" no es la variable dl parámetro "IN tabla VARCHAR(100)", sino una tabla cuyo nombre es "tabla". Simplemente no reconoce el parámetro como una variable y automáticamente toma su nombre como nombre de la tabla.
¿Se entiende?

Aún así, existe una forma de usar parámetros para definir una sentencia que se puede ejecutar tal que pueda hacer lo que quieres: Usando sentencias preparadas.

En ese contexto sería mas o menos así:

Código MySQL:
Ver original
  1. CREATE PROCEDURE leertabla(IN tabla VARCHAR(100), IN campo VARCHAR(50), IN valor INT)
  2.      @snt = CONCAT('INSERT INTO ', tabla, '(', campo, ') VALUES(', valor, ')');
  3.      PREPARE sent FROM @snt;
  4.      EXECUTE sent;
  5.      DEALLOCATE sent;

Como las sentencias preparadas existen en el ambiente de una conexión y depende de ella, debes destruirlas cuando se hayan terminado de usar (DEALLOCATE), o permanecerán en memoria hasta el cierre de la conexión.
Además, como depende de la conexión, son inaccesibles desde otra conexión a MySQL, aunque sea del mismo usuario.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/12/2010, 13:50
 
Fecha de Ingreso: diciembre-2008
Ubicación: Lima - Perú
Mensajes: 187
Antigüedad: 15 años, 11 meses
Puntos: 3
De acuerdo Respuesta: Tabla como parametro en stored procedure

Gracias, apredí bastante. Ya logré lo que quería, y si alguien más lee este Post, hizo falta agregar "SET" en esta línea del código

Código MySQL:
Ver original
  1. SET @snt = CONCAT('INSERT INTO ', tabla, '(', campo, ') VALUES(', valor, ')');

Y también

Código MySQL:
Ver original
  1. DEALLOCATE PREPARE sent;

Última edición por diego1311; 08/12/2010 a las 14:34

Etiquetas: procedure, stored, parámetros, tablas
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 19:40.