何も返さない関数を作成する方法


107

で関数を書きたいのですがpl/pgsql。私はPostgresEnterprise Manager v3を使用し、関数を作成するためにシェルを使用していますが、シェルでは戻り値の型を定義する必要があります。戻り値の型を定義しないと、関数を作成できません。

結果を返さない関数、つまり新しいテーブルを作成する関数を作成するにはどうすればよいですか?

回答:


167

RETURNS void以下のように使用してください:

CREATE FUNCTION stamp_user(id int, comment text) RETURNS void AS $$
    #variable_conflict use_variable
    DECLARE
        curtime timestamp := now();
    BEGIN
        UPDATE users SET last_modified = curtime, comment = comment
          WHERE users.id = id;
    END;
$$ LANGUAGE plpgsql;

18
他の読者の場合、この#variable_conflict指令は残りの回答とは関係ないことに注意してください。これはサンプル関数の一部にすぎません。唯一の重要なビットはRETURNS voidです。また、クールなことに、PL / PgSQLにプラグマがあることを知りませんでした。
クレイグリンガー

ここでの関連ケースを作る使用です#variable_conflictdba.stackexchange.com/a/105828/3684は
アーウィンBrandstetter

1
この関数を別の関数内で使用するにはどうすればよいですか?なしSELECT * FROM stamp_user(...)で試してみると、私はそれを取得error: query has no destination for result dataし、私が書くだけでstamp_user(...)私は得syntax errorます。
ピル

0

関数は常に何かを返す必要がありますが、次のようなプロシージャを使用できます

do $$

のような通常の機能から始めます

declare
...

しかし、あなたはまだだけ追加機能を実行したい場合は、ボイドの後に戻ります

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.