问题:
在 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 个)。
我对两者之间的返回类型的差异感兴趣(如果有的话)。