[pgsql-jp: 31609] Re: Oracleとの更新処理の違い

岡部太一 okabe @ nsd.jip.co.jp
2003年 11月 26日 (水) 18:56:13 JST


岡部です。
# ちゃんと名乗っていませんでしたが、
# 最近参加させて頂きました。
# よろしくお願いします。

>高田です。
>
>確かにマニュアルにPREPAREというコマンドがありました。
>が、PHPから発行する方法がわからない、またバインド変数
>の宣言の仕方も書いてないみたいでした。

私もやったことが無いので、推測ですが、
「SQLコマンド」ということは
クエリとして発行するSQL文ということと思います。

つまり、
pg_query($conn,"PREPARE plan_name (datatype, ... ) AS query");
そして、
for (...){
  pg_query($conn,"EXECUTE plan_name (parameter, ... )");
}

>普通にPostgreSQLでコーディングする場合は、
>
>for ($j=1;$j<=20;$j++){
> pg_query($conn,"
>  insert into DB_TABLE (ID,FIELD_ID,NAME,TYPE,SIZE)
>   values ($j,$FieldName[$j],$FieldType[$j],$FieldName[$j]")
>}
>
>(適当に書いたので書き損じがあったらすみません)
>のようにするのですか?

はい。(構文までは確認してませんが、方法として。)

これだと単行挿入用の"異なる"SQL文を繰り返し発行することになる、
というのが、Oracleの場合にはバインド変数を用いる理由ですよね。

Oracleのバインド変数を用いる方法も、
PostgreSQLのプリペアードクエリを用いる方法も、
SQL文のパースと実行を明示的に分けて、
実行だけを繰り返すことができるという点が肝だと思います。



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