ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

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を使って加工することにしました。テキスト処理はものすごく強いので、こういう時には頼りになりますね。