postgres で値をまったく返さない単純なストアド プロシージャを作成するにはどうすればよいですか? ストアド プロシージャを呼び出すときに void の戻り値の型を使用しても、単一の行が返されます。
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
postgres で値をまったく返さない単純なストアド プロシージャを作成するにはどうすればよいですか? ストアド プロシージャを呼び出すときに void の戻り値の型を使用しても、単一の行が返されます。
CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
値を返すのは関数ではなく、SELECT
呼び出しに使用した関数です。行が返されない場合、関数は実行されません。
セットを返す関数を悪用することで、「何も返されない」ことを達成できます。
シンプルな機能:
create function x () returns setof record as $$
begin
return;
END;
$$ language plpgsql;
次のことができるようになりました。
# select x();
x
---
(0 rows)
うまくいかない場合 (申し訳ありませんが、私は 8.5 を使用しています)、次の方法を試してください。
# create function x (OUT o1 bool, OUT o2 bool) returns setof record as $$
begin
return;
END;
$$ language plpgsql;
CREATE FUNCTION
パラメータは関係ありませんが、次のとおりです。
そして今、あなたはできる:
# select * from x();
o1 | o2
----+----
(0 rows)
あなたはうまくやっています。他に何も追加する必要はありません。
行の結果は null なので、void リターンです。
それについてあなたができることは何もないと思います。私のvoid関数をチェックすると、それらはすべてあなたのものと同じです。
void を $$ として返し、コード ブロックに return ステートメントはありません。