PerlとExcelマクロは必須スキル?
今日マスタデータを一括削除をする仕事があって、まあ5,000件くらいだったのですが、こんな手順でやりました。
- マスタの一覧をExcelに貼り付け
- お客さんに要らないやつをチェックしてもらう
- Excelマクロを使って、チェックの付いた行に対しDELETE文を組み立ててファイル出力
- バックアップしてから、DELETE文のファイルを実行
で、ちゃんと消えてるか確認しようという話になったのですが、考えてた方法が、
SELECT count(*) FROM Table WHERE key IN (a, b, c,...)
っていうものだったため、SQL文が長大になりすぎてデータベースエラーが発生してしまいました。。
じゃあっていうんで、
SELECT count(*) FROM Table WHERE key = a SELECT count(*) FROM Table WHERE key = b SELECT count(*) FROM Table WHERE key = c ...
っていうのを考え付いたのですが、全SQLを実行するのも時間かかるし、0件だっていうのを出力結果から見るのも大変そうです。
そこで思いついたのが、こんな方法。
SELECT count(*) FROM Table WHERE key IN (a, b, c,...) -- INの中は100個まで SELECT count(*) FROM Table WHERE key IN (a, b, c,...) -- INの中は100個まで SELECT count(*) FROM Table WHERE key IN (a, b, c,...) -- INの中は100個まで ...
つまり、INの中を100個に制限することで、SQL文を短くして発行可能にしつつ、投げるSQLの数を最小限(5,000 / 100 = 50回)にとどめようという作戦です。
ただ、こういうのって、Excelのワークシート関数とかで加工するには、ちょっと厳しいですね。ので、フラットなキーファイルから、Perlを使って加工することにしました。テキスト処理はものすごく強いので、こういう時には頼りになりますね。