このタイプの質問は数回投稿されていますが、提供される解決策は次の状況では理想的ではありません。最初のクエリでは、この最初のクエリが実行されたときに存在することがわかっているテーブル名を選択しています。次に、それらをループしながら、選択したテーブル内のレコード数を照会したいのですが、それらがまだ存在する場合のみです。問題は、ループ中に一部のテーブルが別のスクリプトによって削除されることです。例えば :
SELECT tablename FROM table
-- returns say 100 tables
while (%tables){
SELECT COUNT(*) FROM $table
-- by the time it gets to the umpteenth table, it's been dropped
-- so the SELECT COUNT(*) fails
}
そして、cronで実行されているため、致命的に失敗し、cronから失敗したことを示すメールが送信されます。
DBD::mysql::st の実行に失敗しました: テーブル 'xxx' が /usr/local/lib/perl/5.10.1/Mysql.pm 行 175 に存在しません。
スクリプトは非推奨の Mysql.pm perl モジュールを使用しています。