[pgsql-jp: 40053] Re: EXECUTE USINGについて

Itagaki Takahiro itagaki.takahiro @ oss.ntt.co.jp
2009年 11月 5日 (木) 09:12:00 JST


Hitoshi Harada <umi.tanuki @ gmail.com> wrote:

> というわけで、EXECUTE ... USINGで与えられるパラメータは、プリペアドステートメントで与えられるパラメータ(WHERE id
> = $1等)と同一と考えてよいようです。

はい。なので、
    > EXECUTE 'CREATE TABLE $1(i int)' USING tablename;
の代わりに
    EXECUTE 'CREATE TABLE ' || quote_ident(tablename) || '(i int)';
を使うことになります。
# SQLインジェクションが怖いので quote_ident() をお忘れなく!

ところで、文字列の連結がたくさんあるとコードが読みづらいので、
    EXECUTE printf('CREATE TABLE $1(i int)', quote_ident(tablename));
みたいな機能はあっても良い気はしますね。

------------------------------------------------------------
NTT オープンソース ソフトウェア センタ
板垣貴裕 <itagaki.takahiro @ oss.ntt.co.jp>





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