SELECTステートメントしかないPostgresql関数があります。
CREATE OR REPLACE FUNCTION fun_test()
RETURNS INTEGER AS $$
DECLARE size INTEGER;
BEGIN
SELECT COUNT(*) INTO size FROM tab;
RETURN size;
END;
$$ LANGUAGE plpgsql STABLE;
次のコマンドで関数を呼び出すと、次のようになります。
SELECT fun_test()
結果は正しいですが、警告も表示されます。
WARNING: A stable or volatile function is used as if it is immutable
HINT: The function should be declared as stable or volatile in create function statement.
Postgresqlのドキュメントで、結果がデータベースルックアップ、パラメーター変数(現在のタイムゾーンなど)などに依存する関数には、STABLEが適切な選択であることがわかりました。http://www.postgresql.org/docs/8.2/static/sql -createfunction.html
私の質問は、警告がどこから来るのかということです。ドキュメントに必要なことを実行しているようです。どんな助けでも大歓迎です。
編集:
私はpostgresqlサーバー8.2.15を使用しています
全体の話:
CREATE TABLE algo.chengb_tmp
(
userid INT,
username varchar(100)
)
CREATE OR REPLACE FUNCTION algo.chengb_fun_test()
RETURNS INTEGER AS $$
DECLARE size INTEGER;
BEGIN
SELECT COUNT(*) INTO size FROM algo.chengb_tmp;
RETURN size;
END;
$$ LANGUAGE plpgsql STABLE;
SELECT algo.chengb_fun_test()
チェン