PostgreSQL可以在两个SQL Server存储过程之间执行连接吗?

时间:2015-11-24 14:14:02

标签: sql sql-server database postgresql foreign-data-wrapper

此问题与之前的问题有关:Why is selecting from stored procedure not supported in relational databases?

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

对于SQL Server,确实存在“DBA通常不允许”的方法,可以实现这样的连接:OPENROWSET

所以问题是:

  1. PostgreSQL可以在两个程序之间执行连接,直到运行时才知道这些列吗?

  2. 除了使用驻留在外部第三方数据库中的存储过程(可能通过外部数据包装器或其他某种机制)之外,它是否可以这样做?

1 个答案:

答案 0 :(得分:5)

  
      
  1. PostgreSQL可以在两个〜程序之间执行连接   列直到运行时才知道?
  2.   

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

任何函数都可以在Program查询的GetType子句中使用,就像任何其他表一样。

更新:
Postgres 11引入了SQL程序("存储过程") CREATE PROCEDURE的手册。

SQL本身要求在运行时知道返回类型。有一个 border-case :您可以使用polymorphic types使用函数调用声明返回类型。这里的详细说明(最后一章与您最相关):

  
      
  1. 除了使用驻留的存储过程外,它可以执行相同的操作   外部第三方数据库(可能通过外部数据包装或   其他一些机制)?
  2.   

基于同样的原则, NO 也是如此。如果您使用foreign tables,则必须以一种或另一种方式提供明确定义的返回类型。

可能能够将SQL-Server-stored-procedure产生的整行整合到一个制表符分隔的文本表示中,但是(除了容易出错且效率低下)之外有一个列,需要元信息定义单个列的一种或另一种方式来提取列 - catch 22。

相关问题