pg_execute

Name

pg_execute -- 問い合わせを送り、(オプションで) 結果を繰り返し処理します。

Synopsis

pg_execute [-array arrayVar] [-oid oidVar] dbHandle queryString [queryProcedure]

入力

[-array arrayVar]

結果のタプルを格納する配列変数の名前を指定します。インデックスはフィールド名です。queryString が SELECT 文でない場合、この指定は無視されます。SELECT 文の場合でこのオプションを使用しない場合、結果タプルの値は、結果のフィールド名に従って命名された個々の変数に格納されます。

[-oid oidVar]

INSERT 文で取得した OID を格納する変数の名前を指定します。

dbHandle

有効なデータベースハンドルを指定します。

queryString

有効な SQL 問い合わせを指定します。

[queryProcedure]

SELECT 文の各結果タプルを処理するための、オプションのコマンド。

出力

ntuples

問い合わせの影響を受けるか、または問い合わせで返されるタプル数です。

説明

pg_execute は、問い合わせを PostgreSQL バックエンドに送ります。

問い合わせが SELECT 文ではない場合、問い合わせは実行され、この影響を受けるタプルの数が返されます。INSERT の問い合わせで単一のタプルが挿入される場合、オプションの -oid 引数が指定されていると、挿入されるタプルの OID が oidVar 変数に格納されます。

問い合わせが SELECT 文の場合、問い合わせは実行されます。結果内の各タプルについて、タプルのフィールド値が、フィールド名を配列のインデックスとして arrayVar 変数に格納されます。arrayVar がない場合は、フィールド名に従った名前の変数内に格納されます。その後、オプションの queryProcedure がある場合には、実行されます。(問い合わせが単一のタプルを返す場合にのみ、queryProcedure の省略を検討することをお勧めします)。選択されたタプルの数が返されます。

queryProcedure では、Tcl コマンドの breakcontinue、および return を通常どおりに使用することができます。ただし、queryProcedurereturnpg_execute を実行しても、ntuples は返されないので注意してください。

pg_execute は新しい関数で、pg_select 機能のスーパーセットを提供するものです。また、結果ハンドルへのアクセスが必要ない多くの場合に pg_exec の代わりに使用することができます。

バックエンド処理のエラーが起こると、pg_execute は Tcl エラーをスローし、 2 つの要素から成るリストを返します。1 つ目の要素は PGRES_FATAL_ERROR などのエラーコードで、2 つ目の要素はバックエンドエラーテキストです。バックエンドとの通信エラーなどのより重大なエラーの場合、pg_execute は Tcl エラーをスローし、エラーメッセージテキストのみを返します。

使用方法

以下の例では、catch によるエラー検査を省略しています。

行を挿入して、OID を result_oid に保存する。

pg_execute -oid result_oid $pgconn "insert into mytable values (1)"

各行の項目と値のフィールドを表示する。

    pg_execute -array d $pgconn "select item, value from mytable" {
       puts "Item=$d(item) Value=$d(value)"
    }

最大値および最小値を検索して、それぞれ $s(max) および $s(min) に格納する。

    pg_execute -array s $pgconn "select max(value) as max,\
      min(value) as min from mytable"

最大値および最小値を検索して、それぞれ $max および $min に格納する。

pg_execute $pgconn "select max(value) as max, min(value) as min from mytable"