「まつもとゆきひろコードの世界」の「11章 セキュリティについて」の中で SQL インジェクション対策として、パラメータを外部から与えて実行する例が掲載されています。
SQL インジェクション対策でなくても SQL の組み立て実行が分離され、都合が良さそうなのでテストしてみました。
$ psql dbname Welcome to psql 8.1.18, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit dbname=> select * from club_jusho; code | post | address ------+---------+---------------- 0 | 9999999 | なし 1 | 1230035 | あああ (略) 18 | 1230023 | いいいい (19 rows)
パラメータの出てくる順序に $1、$2 。パラメータの型を()の中にその順序で。
dbname=> PREPARE jusho (int) AS SELECT * FROM club_jusho WHERE code=$1; PREPARE
パラメータに 1 を与えて実行。
dbname=> EXECUTE jusho(1); code | post | address ------+---------+------------ 1 | 1230035 | あああ (1 row)
パラメータに 0 を与えて実行。
dbname=> EXECUTE jusho(0); code | post | address ------+---------+--------- 0 | 9999999 | なし (1 row)
定義を取り消すとき。
dbname=> DEALLOCATE jusho; DEALLOCATE