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) (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
sin imagen de perfil

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 (44 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

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

Publicado por Saturnino Pavón (1 intervención) el 24/10/2019 11:43:04
Buenos días Braulio, acabo de ver tu Post de nombre dinámico de tablas y te agradezco muchísimo esa enseñanza y tu tiempo. Yo soy un novato y estba buscando esa solución.
Lo dicho muchísimas gracias y un saludo.
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
Imágen de perfil de Francisco
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

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

Publicado por Francisco (73 intervenciones) el 24/10/2019 22:55:29
Hola

Por un store procedure se puede crear tablas dinamicas


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-- DROP PROCEDURE IF EXISTS createLogTable;
DELIMITER //
CREATE PROCEDURE createLogTable(tblName VARCHAR(255))
BEGIN
    SET @tableName = tblName;
    SET @q = CONCAT('
        CREATE TABLE IF NOT EXISTS `' , @tableName, '` (
            `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
            `something` VARCHAR(10) NOT NULL,
            `somedate` DATETIME NOT NULL,
            PRIMARY KEY (`id`)
        ) ENGINE=MyISAM DEFAULT CHARSET=utf8
    ');
    PREPARE stmt FROM @q;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
 
CALL createLogTable('exampleTable');

Fuente: https://stackoverflow.com/questions/14379088/mysql-create-table-dynamically



Saludos
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