Tengo un script sh donde me conecto a mysql e intento ejecutar un procedimiento almacenado guardado en un archivo local.

tblName="table${k}"
mysql -h 10.0.0.1 --user=username --password=password 
      -e "use db_test; set @tableName=${tblName}; source query.sql;"

Y el archivo query.sql:

set @str = concat('create table ', @tableName, ' (
 id int not null,
 ....
);');
prepare stmt from @str;
execute stmt;
deallocate prepare stmt;

El comando mysql está en un bucle for, "k" es un índice. Quiero crear una tabla con el nombre tomado de la variable tableName. El problema es que recibo un error como:

ERROR 1054 (42S22) at line 1: Unknown column 'table1' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table2' in 'field list'
ERROR 1054 (42S22) at line 1: Unknown column 'table3' in 'field list'
...

Soy un poco confuso porque "table1" es un nombre de tabla y no una columna. ¿Que estoy haciendo mal? Encontré muchos ejemplos usando este enfoque, pero no sé por qué para mí no funciona.

0
AlleXyS 27 oct. 2020 a las 11:28

1 respuesta

La mejor respuesta

El comando:

set @tableName=${tblName}

Requiere que el nombre de la tabla esté entre ''.

Para arreglar hacer:

set @tableName='${tblName}'

Probar esto en el shell de MySQL muestra el problema:

mysql> set @tableName=table1;
ERROR 1054 (42S22): Unknown column 'table1' in 'field list'
mysql> set @tableName='table1';
Query OK, 0 rows affected (0.00 sec)

mysql>
1
Sergiu 27 oct. 2020 a las 08:56