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

Procedimiento almacenado asignar nombre a tabla creada

Estas en el tema de Procedimiento almacenado asignar nombre a tabla creada en el foro de Mysql en Foros del Web. hola amigos estoy realizando un procedimiento almacenado que me permita listar los usuarios creados en determinado año, pero necesito que el nombre de la tabla ...
  #1 (permalink)  
Antiguo 27/08/2012, 14:10
 
Fecha de Ingreso: febrero-2011
Mensajes: 43
Antigüedad: 13 años, 9 meses
Puntos: 0
Procedimiento almacenado asignar nombre a tabla creada

hola amigos estoy realizando un procedimiento almacenado que me permita listar los usuarios creados en determinado año, pero necesito que el nombre de la tabla a crear sea el mismo que le mando via parametro.

es decir que si ejecuto call usuarios_anios(2011), que en este caso seria el parametro que le estoy enviando al procedimiento almacenado, este asigne a @nombre_table ese valor

para que me cree una tabla llamada por ejemplo 2011 con el resultado de la consulta
y si envio como parametro otro año, me cree dinamicamente la tabla con el año especificado

BEGIN
set @nombre_tabla=vanio;
drop table if exists @nombre_tabla;
create table @nombre_tabla as(select * from usuarios where year(fecha_create)=vanio);
END


call usuarios_anios(2012)


gracias por su ayuda

tengo error con las lineas que estan en color rojo, ya que no me asigna el nombre de tabla en el parametro que recoje el procedimiento almacenado llamada vanio.

pueden indicarme como debo corregir el procedimiento para que se cree la tabla con el año que yo le indique, gracias y saludos
  #2 (permalink)  
Antiguo 27/08/2012, 15:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Procedimiento almacenado asignar nombre a tabla creada

Hola vmoran2009:

¿Cuál es la razón para tener que crear una tabla cada vez que se invoca el SP?... no termino de encontrar una razón para hacer esto. La administración de los objetos de la BD (tablas, procedimientos, funciones, etc.) es una tarea que debe competer unica y exclusivamente al DBA, y si se tiene un buen diseño de BD, la creación de nuevos objetos debería ser una tarea bastante inusual y por ningún motivo debería ser parte de un Procedimiento almacenado... pero tal vez tú tengas una razón de peso para hacerlo... estoy esperando tu punto de vista.

En todo caso, podrías intentar utilizar sentencias preparadas

http://dev.mysql.com/doc/refman/5.0/es/sqlps.html

Aunque si te soy sincero, nunca he utilizados esto para crear objetos de BD... ignoro en realidad si te pueda servir o no... sería cuestión de que hagas las prueba.

Saludos
Leo.
  #3 (permalink)  
Antiguo 27/08/2012, 17:04
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: Procedimiento almacenado asignar nombre a tabla creada

Como te dice leonardo_josue, normalmente el esquema de una base es fijo. No se modifica si no es por razones de mucho peso, y solamente si es estrictamente necesario.
Crear tablas dinámicamente te llevará muy rápido a perder control del diseño de datos, además de causarte enormes problemas de consistencia e integridad, porque no puedes definir livianamente N restricciones de FK contra tablas relacinadas si n que en algún momento todo haga colapso.
Si el objetivo es crear tablas "históricas", eso no se hace creando tablas son sufijos o prefijos de años, sino diseñando un datamart o datawarehouse para contener esa info.
Por eso lo que intentas se desaconseja completamente si lo que quieres es tener una base de datos bien diseñada, optimizada, eficaz y eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: nombre, procedimiento, select, tabla, almacenar
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 13:12.