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;