问题:
在Microsoft SQL Server中,存在过程,并且存在表值函数。
不同之处在于,从存储过程中,我无法进一步选择,而从表值函数中,我可以。
e.g。
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和存储的precedure - 假设 存在差异。< / p>
所以我的问题也可以制定:
在PostGreSQL中,如何创建表值函数,以及如何创建存储过程(每个示例1个)。
我对两者之间的返回类型的差异感兴趣,如果有的话
答案 0 :(得分:3)
PostgreSQL没有真正的存储过程,只有用户定义的函数:
CREATE FUNCTION foo() RETURNS TABLE(bar INT, baz TEXT) ...
CREATE FUNCTION bar() RETURNS BOOLEAN ...
检查数据类型“record”:
SELECT * FROM information_schema.routines WHERE data_type = 'record';