質問:
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つの戻り値の型の違いに興味があります。