スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PL/pgSQLで引数の総和と平均を求めるVer2

最近は電車の中でiPhoneでPostgreSQLのマニュアルを読んで時間を潰しているんですが、そこに蒙を啓くような事柄が書いてありました。
なんと、可変長引数の関数に配列が渡せるんだそうです!
ということは、以前書いたPL/pgSQLで引数の総和と平均を求めるは、関数は動くけど記事の内容が間違ったことになっちゃているので、この記事にて訂正します。
■引数の合計を求める

CREATE OR REPLACE FUNCTION uv_sum(
p_params VARIADIC numeric[]
) RETURNS numeric AS $$
DECLARE
w_result numeric := 0;
BEGIN
FOR i IN 1..array_length(p_params, 1) LOOP
IF p_params[i] IS NOT NULL THEN
w_result := w_result + p_params[i];
END IF;
END LOOP;
RETURN w_result;
END;
$$ LANGUAGE plpgsql;

■引数の平均を求める

CREATE OR REPLACE FUNCTION uv_avg(
p_params VARIADIC numeric[]
) RETURNS numeric AS $$
DECLARE
BEGIN
RETURN uv_sum(VARIADIC p_params) / array_length(p_params, 1);
END;
$$ LANGUAGE plpgsql;

ポイントは、可変長引数の関数を呼び出すときに、VARIADICとつければいいんです。
気がつけば、非常に簡単です・・・マニュアルはちゃんと読まないとダメですね。


一行入魂サイトにまとめがあります。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。