$columns_outputの内部値は次のとおりです。
dbname1.tablename
dbname2.tablename
dbname3.tablename
dbname4.tablename
スクリプトの一部
$columns_output=""
for value in "$columns_output"; do
sql_query2="ANALYZE table '$columns_output';"
query_result2=$(mysql -h "$db_host" -P "$db_port" -u "$db_user" -p"$db_password" -e "$sql_query2")
echo -e "Query Analyze Results:\n$query_result2"
done
各行に対してクエリを実行する必要がある以下の結果を取得するにはどうすればよいですか?ロジックと修正に助けが必要です。
ANALYZE table dbname1.tablename;
ANALYZE table dbname2.tablename;
ANALYZE table dbname3.tablename;
ANALYZE table dbname4.tablename;
ベストアンサー1
これがcolumns_output
改行で区切られたテーブル名を含む単一の文字列であるとします。その後、ANALYZE TABLE
各行の先頭$columns_output
と末尾に次の単語を挿入して一連のステートメントを生成し、;
それをデータベースクライアントに提供できます。
printf '%s\n' "$columns_output" | sed '/.*/ANALYZE TABLE &;/' |
mysql -h "$db_host" -P "$db_port" -u "$db_user" -p"$db_password"
一連のテーブルを使用します。
tables=(
dbname1.tablename
dbname2.tablename
dbname3.tablename
dbname4.tablename
)
printf 'ANALYZE TABLE %s;\n' "${tables[@]}" |
mysql -h "$db_host" -P "$db_port" -u "$db_user" -p"$db_password"
テーブルごとに1つのステートメントの代わりに、カンマで区切られたテーブルのリストを使用することもできますANALYZE TABLES
(注)。S
上記のテーブル名の配列を使用するとします。
(IFS=, ; printf 'ANALYZE TABLES %s\n' "${tables[*]}") |
mysql ...as before...