思いつくままプログラミングネタを書き殴ります。PL/pgSQLで行番号の入れ替えコンボボックスに並ぶようなデータを入れ替える時、Webでは↑↓のようなボタンを押して順番を入れ替える方法があります。移動したい行番号を指定して位置をいれかえることもあります。これをSQLで考えてみたいと思います。line_no;1;1;1;"one";01;2;2;"two";01;3;3;"three";01;4;4;"four";01;5;5;"five";0例えば上のような、テーブルとデータがある時、5番目のデータを1番目に挿入したいとします。順番は5,1,2,3,4になるわけですが、5→1,1→2,2→3,3→4,4→5に行番号を入れ替えることになります。SQLは一回の発行で済ませたいので、以下のようになります。1;また、削除を考えてみますと、削除された項目以下はすべて繰り上がることになります。1,2,3,4,5の並びで2を削除すると、3→2,4→3,5→4で行番号を入れ替えることになります。SQLは以下のようになります。1;このSQLだけでも十分便利なんですが、ここは無理矢理(笑)PL/pgSQLにしてみます。1');のようになります。今回のPL/pgSQLは動的SQLのサンプルになっています。テーブル名とカラム名を渡せばよいので、行番号が必要なテーブルが増えるたびにSQLを追加する必要がありません。テーブル構造が似ているSQLの再利用を考えると、動的SQLは便利に使えます。あ、ちなみにWHERE句も引数として渡すことになりますが、これは直接SQLを組み立てるのに使うので、SQLインジェクションに注意してください。(12/28)PostgreSQLとRubyを組み合わせてブラックリストチェックの速度を測ってみた。