13

postgres で値をまったく返さない単純なストアド プロシージャを作成するにはどうすればよいですか? ストアド プロシージャを呼び出すときに void の戻り値の型を使用しても、単一の行が返されます。

CREATE FUNCTION somefunc(in_id bigint) RETURNS void AS $$
BEGIN
   DELETE from test_table where id = in_id;
END;
$$ LANGUAGE plpgsql;
4

3 に答える 3

8

値を返すのは関数ではなく、SELECT呼び出しに使用した関数です。行が返されない場合、関数は実行されません。

于 2009-08-27T22:00:34.783 に答える
6

セットを返す関数を悪用することで、「何も返されない」ことを達成できます。

シンプルな機能:

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

パラメータは関係ありませんが、次のとおりです。

  • あなたはそれらの> 1が必要です
  • 名前を付ける必要があります

そして今、あなたはできる:

# select * from x();
 o1 | o2
----+----
(0 rows)
于 2009-08-28T06:33:29.603 に答える
5

あなたはうまくやっています。他に何も追加する必要はありません。

行の結果は null なので、void リターンです。

それについてあなたができることは何もないと思います。私のvoid関数をチェックすると、それらはすべてあなたのものと同じです。

void を $$ として返し、コード ブロックに return ステートメントはありません。

于 2009-08-27T22:00:52.130 に答える