4

質問:

Microsoft SQL Server には、ストアド プロシージャとテーブル値関数があります。

違いは、ストアド プロシージャからはさらに選択を実行できないのに対し、テーブル値関数からは実行できることです。

例えば

SELECT * FROM sp_whatever WHERE xxx違法ですが

SELECT * FROM TVF_whatever WHERE xxx完全に合法です

今私の質問:

PostgreSQL では、information_schema.routinesテーブル値関数とプロシージャをどのように区別できますか?

違いはありますか?

一般的に、PostgreSQL で関数とプロシージャを区別するにはどうすればよいでしょうか?

つまり、理論的には、SQL サーバーでは、次のように区別できます。
テーブル値関数:information_schema.data_type = 'table'
ストアド プロシージャ:information_schema.data_type IS NULL
関数:information_schema.data_type != 'table' AND information_schema.data_type IS NOT NULL

これはPostgresでどのように行われますか?

理論的には、ストアド プロシージャの戻り値の型は void ですが、ストアド プロシージャはテーブルを返すこともできるため、違いがあると仮定して、tvf とストアド プロシージャを区別する方法はありません。

したがって、私の質問も定式化できます
。PostGreSQL では、テーブル値関数を作成する方法と、ストアド プロシージャを作成する方法 (それぞれ 1 つの例)。

もしあれば、2つの戻り値の型の違いに興味があります。

4

1 に答える 1

3

PostgreSQL には実際のストアド プロシージャはなく、ユーザー定義関数のみがあります。

CREATE FUNCTION foo() RETURNS TABLE(bar INT, baz TEXT) ...

CREATE FUNCTION bar() RETURNS BOOLEAN ...

データ型「レコード」を確認します。

SELECT * FROM information_schema.routines WHERE data_type = 'record';
于 2012-09-07T06:23:17.380 に答える