« PostgreSQLでカレントスキーマを設定 | Main | Tracの設定ファイルのinherit »

2009.01.24

PL/pgSQLでupdate件数を取得する

PostgreSQLのストアド関数でPL/pgSQLを使ってみる練習。まずは、PL/pgSQLを使えるかどうかの確認。

psql -U username -d testdb -c "select * from pg_language;"

で、インストールされている言語の一覧を取得できます。
 lanname  | lanowner | lanispl | lanpltrusted | lanplcallfoid | lanvalidator | lanacl
----------+----------+---------+--------------+---------------+--------------+--------
 internal |       10 | f       | f            |             0 |         2246 |
 c        |       10 | f       | f            |             0 |         2247 |
 sql      |       10 | f       | t            |             0 |         2248 |
(3 rows)

ってことで、インストールされていないようなので、
createlang -h 127.0.0.1 -d testdb -U username plpgsql

で実際に使用するデータベースに対してPL/pgSQLをインストール(参考:PostgreSQL 編19 - ストアドファンクション、function、PL/pgSQL、トリガー)。

CREATE FUNCTION schema1.test2(incol2 character)
  RETURNS integer AS
$BODY$
declare
  result integer;
begin
update table1 set col3=now() where col2=$1;
if found then
  GET DIAGNOSTICS result = ROW_COUNT;
  return result;
else
  return -999;
end if;
end;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
foundの結果で分岐していることを分かりやすくするため、更新結果が0件だった場合は強制的に-999を戻すようにしています(それ以外の場合は、更新結果の件数を戻します)。

※実際に使うとなると、updateの件数に応じてさらに次の処理を切り替えるような複雑な(?)ストアドになるとは思いますが。

第 38章PL/pgSQL - SQL手続き言語 38.5. 基本的な文
第 38章PL/pgSQL - SQL手続き言語 38.6. 制御構造

|

« PostgreSQLでカレントスキーマを設定 | Main | Tracの設定ファイルのinherit »

DB」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/3959/43838617

Listed below are links to weblogs that reference PL/pgSQLでupdate件数を取得する:

« PostgreSQLでカレントスキーマを設定 | Main | Tracの設定ファイルのinherit »