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

CREATE DATABASE con un Stored Procedure

Estas en el tema de CREATE DATABASE con un Stored Procedure en el foro de Mysql en Foros del Web. Es posible hacer eso? Es posible crear con un procedimiento almacenado algo como esto? Código: DELIMITER $$ CREATE PROCEDURE `SP_ADD_DATABASE`(nombre VARCHAR(50), tabla VARCHAR(50), telefono VARCHAR(50) ...
  #1 (permalink)  
Antiguo 04/04/2008, 21:28
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 19 años, 11 meses
Puntos: 1
CREATE DATABASE con un Stored Procedure

Es posible hacer eso?

Es posible crear con un procedimiento almacenado algo como esto?

Código:
DELIMITER $$

CREATE PROCEDURE `SP_ADD_DATABASE`(nombre VARCHAR(50), tabla VARCHAR(50), telefono VARCHAR(50) )

BEGIN

CREATE DATABASE `nombre`;

USE `nombre`;

CREATE TABLE `tabla`
(
   ID                int not null auto_increment,
   TELEFONO              varchar(50),
   primary key (ID)
)
type = InnoDB;

INSERT INTO `tabla` (TELFONO)
	VALUES ("telefono");

END $$
Necesito que con unos datos que entregue el usuario, se cree una base de datos con cierto nombre, con ciertas tablas que contengan ciertos datos.

Es posible crear eso con un procedimiento almacenado? Cómo?

Thanks!
  #2 (permalink)  
Antiguo 15/04/2008, 16:54
Avatar de quinqui  
Fecha de Ingreso: agosto-2004
Ubicación: Chile!
Mensajes: 776
Antigüedad: 19 años, 8 meses
Puntos: 56
Re: CREATE DATABASE con un Stored Procedure

Tengo casi exactamente esta misma duda.

En otro tema han dicho que no es posible usar las variables para señalar Tablas, pero también sigo esperando más opiniones ^^...
__________________
pipus.... vieeeeeji plomius!!!
*quinqui site*
  #3 (permalink)  
Antiguo 16/04/2008, 05:05
Avatar de 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
Re: CREATE DATABASE con un Stored Procedure

No. No es posible usar variables en forma eficiente para crear tablas. Pero sí se puede usar sentencias de SQL creadas desde la aplicación para hacerlo.
La cosa es usar:
1. Una para crear la base.
2. Cerrar la conexión activa.
3. Volver a crear la conexión, ahora a la nueva base.
4. Crear secuencialmente las tablas, sin indicar en qué base se deben crear, de ese modo lo hará en la base activa. Esta creación se hará con sentencias ejecutadas secuencialmente, una por tabla.

Yo uso una clase en .net para crear el modelo de datos completo, incluyendo vistas, triggers y store procedures de la base y no he tenido problemas en ningún caso.
  #4 (permalink)  
Antiguo 16/04/2008, 10:00
 
Fecha de Ingreso: mayo-2004
Ubicación: Santiago, Chile
Mensajes: 191
Antigüedad: 19 años, 11 meses
Puntos: 1
Re: CREATE DATABASE con un Stored Procedure

Si, tambien pensé en esa idea, pero lamentablemente aún no domino bien lo que son los SP's y no si es posible crear "SP's anidados" entonces con uno creo la base, luego llamo a otro que usa otra y crea tablas etc...

Lo otro que creo que me has dado a entender con la clase de .net, es que en PHP podria hacer varios "CALL" por separado, entonces el primero crea la base, el segundo crea las tablas, etc.

De todas maneras esto ya no me sirve mucho ahora jajjaja porque el hosting no me permite la creacion de bases de datos mientras no sea a traves del CPANEL, pero algun dia pienso poner el servidor dedicado y ahi podré =)

Veré como hacerlo de manera local, pero para dejarlo todo en el mismo archivo, deberia hacerse algo asi:

Código:
CREATE PROCEDURE SP_crea_bd (base VARCHAR(30) )

BEGIN
CREATE DATABASE base;

END$$
Código:
CREATE PROCEDURE SP_crea_tabla (base VARCHAR(30), tabla VARCHAR(30) )

BEGIN
CREATE TABLE tabla.base (
`test1` VARCHAR( 23 ) NOT NULL ,
`test2` VARCHAR( 23 ) NOT NULL ,
`test3` VARCHAR( 23 ) NOT NULL
) 

END$$
PHP:

Código:
CALL SP_crea_bd ("prueba");
CALL SP_crea_tabla ("prueba", "tablaprueba");
Tendria que se algo asi, cierto? Y asi sigo con los insert y etc...?
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 09:05.