vimで指定したテーブルのカラム一覧を挿入する

プログラム中で、データベースからSELECT文を作るときに、テーブルのカラム数が多いと割とメンドクサイですよね。ぐぐっても出てこなかったので作りました。

まず、指定したテーブルのカラム一覧を取得するシェルスクリプトを作ります。

  • getcolumn.sh
#!/bin/bash
echo "SELECT concat('\'',column_name,'\',') FROM information_schema WHERE table_schema='DB名' AND table_name='$1' ORDER BY ordinal_position "|mysql -uユーザー -pパスワード -N  
  • SQL的には単にインフォメーションスキーマからカラム一覧を取得して来ただけですね。
SELECT concat('\'',column_name,'\',')  
  FROM information_schema 
 WHERE table_schema='DB名' 
    AND table_name='$1'
 ORDER BY ordinal_position

あとはMySQLのクライアントに流し込むだけですが、ポイントは『-N』オプション、これで、カラム名表示を消しています。

あとは任意の挿入したい場所でvimのコマンドで

:r!getcolumn.sh テーブル名

でズバッと挿入できます。

使っているフレームワークや、ORマッパーによって、自動で追加されているカラム、作成・更新・削除日時を除外しておくというのもありです。

SELECT concat('\'',column_name,'\',') 
  FROM information_schema 
 WHERE table_schema='DB名' 
    AND table_name='$1'
    AND column_name NOT IN('create_time','update_time','delete_time') 
 ORDER BY ordinal_position