シェルスクリプトの知見が浅く、質問を投稿させていただきました。
実現したいこと
テーブル名に一定の規則を持った複数のテーブルに対し、一斉にカラムの追加を行うといった作業を予定しており、「もしカラムが存在しなければALTER TABLEでカラムを追加する」といった機能を実現したいと考えています。
問題
それにあたり 「カラムの存在チェック」を目的として下記のように information_schema.columns
からカラムの存在数を確認しようとしましたが、参照することが出来ません。
■ 該当の記述
CMD="echo 'select count(*) from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='$DB' and TABLE_NAME='$table' and COLUMN_NAME='IMAGE_THUMBNAIL';' | mysql $OPTIONS$PW"
上記記述でERROR 1054 (42S22) at line 1: Unknown column 'table_name' in 'where clause'
となり、落ちてしまいます。
■ ソース全体(下から6行目が該当行)
#!/bin/bash # 引数1:DB名を指定 # 引数2:更新テーブルの末尾を指定 # 引数3:sqlのパスワードを指定 #引数チェックによりusageを返す if [ "$1" = "" ] || [ "$2" = "" ]; then cat <<-EOS usage $0 [db name] [end of the table name] [mysql password] EOS exit fi # 変数 DB=$1 TABLE=$2"$" OPTIONS="-u root -D $DB -p" if [ "$3" != "" ]; then PW=$3 fi # テーブル名の取得 TABLES=`ECHO 'show tables;' | mysql $OPTIONS | grep -E "$TABLE"` # テーブル名の確認 ECHO "$TABLES" # 処理の確認 echo -n "実行します。よろしいですか? [y/N]: " read ANS case $ANS in [Yy]* ) echo "Yes: 処理を実行します" for table in $TABLES do CMD="echo 'select count(*) from INFORMATION_SCHEMA.COLUMNS where TABLE_SCHEMA='$DB' and TABLE_NAME='$table' and COLUMN_NAME='IMAGE_THUMBNAIL';' | mysql $OPTIONS$PW" eval "$CMD" echo done ;; * ) echo "No: 処理をキャンセルしました" ;; esac
試したこと
試したこととしては、以下になります。
- mysqlに自身でログインした際は、問題なく
information_schema.columns
を参照できる - 該当行を他のテーブル参照に差し替えて実行(select文等)した場合は、問題なく実行できる
こちら、原因についてアドバイスなどいただけれれば嬉しいです。尚、 mysqlバージョンは5.6になります。

回答1件
あなたの回答
tips
プレビュー