SQL Server 上是不是有类似于 Oracle 的 PIPE ROW 的代码?

Posted

技术标签:

【中文标题】SQL Server 上是不是有类似于 Oracle 的 PIPE ROW 的代码?【英文标题】:Is there any code on SQL Server similar to Oracle's PIPE ROW?SQL Server 上是否有类似于 Oracle 的 PIPE ROW 的代码? 【发布时间】:2020-02-20 16:51:46 【问题描述】:

哪段代码与 SQL Server 中 Oracle 的 PIPE ROW 类似?第一次学Oracle,刚遇到一串代码中的“PIPE ROW”,有什么用?

【问题讨论】:

the description in the documentation 有帮助吗? T-SQL 中的表值函数能解决您的问题吗? 【参考方案1】:

在 Oracle 中,函数是一个返回值的存储过程:

create or replace function get_number
  return number is
begin
  return 42;
end;
/

select get_number
from dual
/

但返回值不必是标量。如果它是一个嵌套表,我们可以使用 table() 函数访问它,并将其视为查询的 FROM 子句中的实际表:

create or replace function get_numbers
  return sys.odcinumberlist is
begin
  return sys.odcinumberlist (23, 42);
end;
/

select * 
from table(get_numbers)
/

但如果函数是流水线函数,我们可以使用pipe row 调用来输出我们喜欢的任何值。因此我们可以使用编程逻辑来确定输出,例如生成从1n 的数字列表:

create or replace function get_n_numbers (p_n in number)
  return sys.odcinumberlist pipelined is
begin
  for n in 1..p_n loop
    pipe row(0+n);
  end loop;

  return;
end;
/

select * 
from table(get_n_numbers(3))
/

这是db<>fiddle上的演示。

流水线函数似乎是一个非常强大的功能,但实际上它们的用例相当小众。例如,我们可以使用to split a string into distinct tokens,但使用regex 或xslt 可能更快。

【讨论】:

以上是关于SQL Server 上是不是有类似于 Oracle 的 PIPE ROW 的代码?的主要内容,如果未能解决你的问题,请参考以下文章

类似 phpMyAdmin 但适用于 SQL Server 的东西? [关闭]

在SQL Server和Postgresql中使用CASE作为类似于枢轴的函数

oracle是不是有类似sql server企业管理器一样的工具?

Sql server中有没有replace语句? 没有的话,怎样实现类似于mySql中的repla

SQL Server 2008 中的功能类似于 mysql 中的 GREATEST?

如何在 MySQL 中打破类似于 MS SQL Server 的列名?