HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

CREATE FUNCTION文による関数定義

PostgreSQL v8.3でCREATE FUNCTION文を使って関数を定義したいだけなのに、えらく苦労してしまったので、メモ。

PL/pgSQLを使って関数を定義するための準備

シェルで以下のようなコマンドを実行する。(以下の例はWindowsコマンドプロンプトの場合)

CD /D <PostgreSQLインストールフォルダ>\bin
createlang.exe -U ユーザID plpgsql データベース名

引数なしの関数(LANGUAGE 'plpgsql')

CREATE FUNCTION hoge_plpgsql()
RETURNS INTEGER
AS '
  DECLARE
    retval INTEGER;
  BEGIN
    SELECT 1 INTO retval;
    RETURN retval;
  END;
'
LANGUAGE 'plpgsql';

引数なしの関数(LANGUAGE 'SQL')

CREATE FUNCTION hoge_sql()
RETURNS INTEGER
AS '
  SELECT 1
'
LANGUAGE 'SQL';

引数ありの関数(LANGUAGE 'plpgsql')

CREATE FUNCTION hoge(INTEGER)
RETURNS INTEGER
AS '
  DECLARE
    param1 ALIAS FOR $1;
    retval INTEGER;
  BEGIN
    SELECT 1 + param1 INTO retval;
    RETURN retval;
  END;
'
LANGUAGE 'plpgsql';

引数ありの関数(LANGUAGE 'SQL')

CREATE FUNCTION hoge_sql(INTEGER)
RETURNS INTEGER
AS '
  SELECT 1 + $1
'
LANGUAGE 'SQL';

要するに

何に苦労したかというと、PL/pgSQLのサンプルを見たときに、「じゃあ、LANGUAGE 'SQL'と指定した場合にパラメータはどうやって参照するんだ」ということが分からなかった、と‥
ISO/IEC標準のSQLに慣れていると、こんなところでつまづいたりする‥orz