[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 メーリングリストの案内