PostgreSQL是否可以在两个SQL Server存储过程之间执行联接



这个问题与前面的一个问题有关:为什么关系数据库不支持从存储过程中进行选择?

在SQL Server上,您不能执行存储过程的联接(或从中选择)(请注意:存储过程函数(SQL Server术语中的表值函数)明显不同-使用函数,您知道在设计时返回的列,但使用过程,要返回的特定列直到运行时才知道)。

对于SQL Server,确实存在一种"DBA通常不允许"的方法,可以在其中完成这样的联接:OPENROWSET

所以问题是:

  1. PostgreSQL是否可以在运行时才知道列的两个过程之间执行联接?

  2. 除了使用驻留在外部第三方数据库中的存储过程(可能通过外部数据包装器或其他机制)之外,它还能做同样的事情吗?

  1. PostgreSQL是否可以在直到运行时才知道列

基本答案很简单,因为目前Postgres中没有存储过程(最多Postgres 10),只有函数-它们提供了几乎但不完全相同的功能,正如您在问题中所阐述的那样。

任何函数都可以像任何其他表一样在SELECT查询的FROM子句中使用。

更新:
SQL过程("存储过程")是在Postgres 11中引入的。
CREATE PROCEDURE

SQL本身要求在运行时知道返回类型。有一个边界大小写:您可以使用多态类型通过函数调用声明返回类型。此处的详细说明(最后一章与您最相关):

  • 重构PL/pgSQL函数以返回各种SELECT查询的输出
  1. 除了使用驻留在外部第三方数据库(可能通过外部数据包装器或其他机制)

基于同样的原理,这也是一个NO。如果使用外部表,则必须以某种方式提供明确定义的返回类型。

可能能够将SQL Server存储过程产生的整行集中到一个单独的制表符分隔的文本表示中,但是(除了容易出错和效率低下之外)您只有一列,并且需要定义单独列的元信息来提取列-catch 22。

相关内容

  • 没有找到相关文章

最新更新