问题:
在 Microsoft SQL Server 中,有存储过程和表值函数。
区别在于,从存储过程中,我不能做进一步的选择,而从表值函数中,我可以。
例如。
SELECT * FROM sp_whatever WHERE xxx 是非法的 而 SELECT * FROM TVF_whatever WHERE xxx 是完全合法的
现在我的问题是:
在 PostgreSQL 中,当我查看 information_schema.routines 时,如何区分表值函数和过程?
是否有任何差异?
而且通常情况下,如何在 PostgreSQL 中区分函数和过程?
我的意思是理论上,对于 SQL Server,可以这样区分它们: 表值函数: 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个)。
我对两者之间返回类型的差异很感兴趣。
在 Microsoft SQL Server 中,有存储过程和表值函数。
区别在于,从存储过程中,我不能做进一步的选择,而从表值函数中,我可以。
例如。
SELECT * FROM sp_whatever WHERE xxx 是非法的 而 SELECT * FROM TVF_whatever WHERE xxx 是完全合法的
现在我的问题是:
在 PostgreSQL 中,当我查看 information_schema.routines 时,如何区分表值函数和过程?
是否有任何差异?
而且通常情况下,如何在 PostgreSQL 中区分函数和过程?
我的意思是理论上,对于 SQL Server,可以这样区分它们: 表值函数: 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个)。
我对两者之间返回类型的差异很感兴趣。
FETCH
结果。不过,老实说,你通常应该只使用返回表格的函数,即返回SETOF something
的函数。 - Craig Ringer