plpgsqlに挑戦してみた。

自分にかかわりのあるところだけ、メモ。
関数の作成は次の通り。本体をシングルクォートで括ります。

CREATE OR REPLACE FUNCTION <関数名> ( <型>, ... )
RETURNS <型>
AS '
  DECLARE
    <変数名> <型>;
    ...
  BEGIN
    ステートメント;
  END;
'
LANGUAGE 'plpgsql';

本体でシングルクォートを使う場合は、'' を使用(VBのダブルクォートみたいなもの)。
変数代入は次の通り。

<変数名> := <式>;
SELECT ... INTO <変数名> FROM ...;

スカラ返り値を与える場合は次の通り。

RETURN <変数名>

ひとつの行を返したい場合は、RETURN NEXTで行をユーザ定義型を押しこめて、最後に返り値無しで返ります。次の通り。

DECLARE
  <変数A> <ユーザ定義型>;
  ...
BEGIN
  ...
  SELECT ... INTO <変数A>;
  RETURN NEXT <変数A>;
  RETURN;
END;

この際、関数の返り値は無いので、たとえばSELECT ... FROM foo();といった具合になります。
複数行を返したい場合は次の通り。

FOR <変数名> IN <クエリ>
LOOP
  RETURN NEXT <変数名>
END LOOP;
RETURN;