MySQL - nombre dinámico de tablas... es posible?

   
Vista:
Imágen de perfil de Braulio (Brad)

nombre dinámico de tablas... es posible?

Publicado por Braulio (Brad) braulio.lanas@gmail.com (13 intervenciones) el 15/07/2016 16:16:15
Estimados gurúes MySQL; pregunta:

Es posible? Y, si lo es, cómo es la sintaxis para nombrar tablas en forma "dinámica", es decir, que el nombre tenga que ver con el contexto.

Por ejemplo,
es posible crear una tabla con una sentencia como

CREATE TABLE CONCAT("tabla_", @segunda_parte) ??

de modo que si le paso el valor @segunda_parte vía parámetros (en un procedimiento almacenado, por ejemplo)

la tabla creada se llamará tabla_34, dado que @segunda_parte = "34".


Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

nombre dinámico de tablas... es posible?

Publicado por DAVID (63 intervenciones) el 15/07/2016 19:01:54
Podrias hacerlo desde php, con lo cual por php puedes poner el nombre que tu quieras. Algo asi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
 
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
 
// sql to create table
$sql = "CREATE TABLE MyGuests".$nombrealeatorio."(
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
)";
 
if ($conn->query($sql) === TRUE) {
    echo "Table MyGuests created successfully";
} else {
    echo "Error creating table: " . $conn->error;
}

Donde en la varable $nombrealeatorio, pondrías el nombre que quisieras.

Espero que e sirva.

Un saludo,
David
soluciones web
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Braulio (Brad)

nombre dinámico de tablas... es posible?

Publicado por Braulio (Brad) (13 intervenciones) el 15/07/2016 19:16:19
David,
muchas gracias por tu respuesta!...Es muy clara.

No obstante,tengo que guardarla por ahora porque aún no aprendo PHP...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

nombre dinámico de tablas... es posible?

Publicado por Leopoldo Taylhardat (43 intervenciones) el 15/07/2016 21:07:57
Saludos...

Que yo sepa nó...
Hace un tiempo publiqué la misma pregunta porque quería migrar a mysql o mariadb y tengo procedimientos que crean tablas y modifican su estructura en forma dinámica... pero nadie logró darme respuesta ni lo conseguí en manuales...

Eso lo hago en sqlanywhere versión 6 (transact SQL) desde hace 20 años y mysql no lo tiene implementado...

En sql anywhere (ASA Sybase) se hace con doble "pipe" es decir...

1
2
3
4
5
6
declare @tabla varchar(128);
declare @sql varchar (512);
set @tabla = 'Tablax";

set @sql='select * from '||@tabla||;
execute immediate @sql;

y la variable @sql se convierte en ... "select * from Tablax"

Postgresql tambien lo implementó hace poco...

El Manual de ASA (versión 6) tiene esta documentación...
The EXECUTE IMMEDIATE statement allows statements to be built up inside procedures using a combination of literal strings (in quotes) and variables.
For example, the following procedure includes an EXECUTE IMMEDIATE statement that creates a table.

1
2
3
4
5
6
7
8
CREATE PROCEDURE CreateTableProc(
 
IN tablename char(30) )
 
BEGIN
	EXECUTE IMMEDIATE 'CREATE TABLE ' || tablename ||' ( column1 INT PRIMARY KEY)'
 
END

In ATOMIC compound statements, you cannot use an EXECUTE IMMEDIATE statement that causes a COMMIT, as COMMITs are not allowed in that context.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar