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
调用来输出我们喜欢的任何值。因此我们可以使用编程逻辑来确定输出,例如生成从1
到n
的数字列表:
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