[pgsql-jp: 29265] Re: SQL文の SELECT について

KASAHARA Norio no @ kasas.org
2003年 3月 2日 (日) 18:13:23 JST


かさはらです。こんにちは。

naoki kishida <kishida @ fk.urban.ne.jp>さん曰く:

》「select * from 〜」としていたために、列を追加したときにその列を利用しな
》いのにプログラムを変更する必要がある、という事態に遭遇したことがないので
》すが、どういった場合にそうなるのでしょうか?
》
まず、生産性を考えたときに、埋め込みSQLの使用できる処理系では、埋め
込みSQLを利用するべきです。
PostgreSQLの場合は、C/C++でのecpg、JavaでのSQLJがこれに相当します。

libpqとecpg、JDBCとSQLJ、使って比べてみれば分かることですが、CLI
(Call Level Interface)と埋め込みSQLでは、圧倒的に生産性に差があります。
で、埋め込みSQLでは、SELECTの選択リストに対応したホスト変数は必ず用
意しなければならない。なのでSELECT * FROM は使いません。

不幸にも、CLIでコーディングしなければならないときにも(スクリプト言語
の場合、埋め込みSQLが使えることは少ないですしね)、`*'を使って読みこ
んだ場合、列の並び順は、実装依存なので、結局面倒なことになります。
JDBCの例で言えば、`*'を使っていなくて列名を書いていれば、

      int col_a = resultSet.getInt(1);

という書き方で、選択リストの一番目の列の値を取り出すことができます。
しかし、`*'を使っている場合は、列の並び順を当てにできないから、必ず

      int col_a = resultSet.getInt("COL_A");

という風に列名を書かなければならない。
なぁんだ、SELECTの選択リストには、列名を書かなくて良いけど、結局1回
は列名を書かなければならないじゃん、ということになります。
列名を書くのを横着しようとしたけど、結局楽できるわけじゃないや、と。

それだったら、無用なバグを作りこむ危険性がある方法は、コーディング規
約で禁止した方がいい、というのが我々チームの考え方です。

--
 カさはらのりお   no @ kasas.org



pgsql-jp メーリングリストの案内