Shell脚本从外部文件执行mysql过程,参数来自命令行



我有一个sh脚本,连接到mysql并尝试执行保存在本地文件中的存储过程。

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

和文件query.sql:

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

mysql命令在for循环中;k〃;是一个索引。我想创建一个名称取自tableName变量的表。问题是我收到一个错误:

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'
...

我有点困惑,因为";表1";是表名,而不是列。我做错了什么?我发现了很多使用这种方法的例子,但我不知道为什么它不起作用。

命令:

set @tableName=${tblName}

要求表名包含在"中。

修复do:

set @tableName='${tblName}'

在MySQL shell中测试显示了问题:

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>

最新更新