在 PL/SQL Oracle 中需要此 T-Sql 函数的等效函数。如果有其他解决方案,那么流水线
Posted
技术标签:
【中文标题】在 PL/SQL Oracle 中需要此 T-Sql 函数的等效函数。如果有其他解决方案,那么流水线【英文标题】:Need an equivalent function for this T-Sql function in PL/SQL Oracle. If there is other solution then Pipelining 【发布时间】:2013-12-15 17:39:53 【问题描述】: ALTER FUNCTION [dbo].[MyFun]()
RETURNS TABLE
AS
RETURN
(
WITH addd(CITY_NAME,CITY_ID)
AS
(
select CITY_NAME,CITY_ID from city
)
select * from addd
)
不需要流水线,因为我想直接调用它,例如在 T-SQL 中调用的那样
Select * from myfun();
【问题讨论】:
你是问如何让函数返回Oracle中的表? 是的,它应该通过直接调用函数返回一个表,而不是像***.com/questions/2829880/… 看“表”函数 如果您的方法是选择一次并多次访问结果,那么我建议插入到全局临时表中。为什么不更具体地解释一下为什么要避免使用流水线函数? 为什么不创建视图?从函数中检索记录比从视图中慢得多。 【参考方案1】:您可以使用 Oracle 流水线函数功能:
第1步:创建一个代表一行结果的对象:
CREATE OR REPLACE TYPE city_type
AS OBJECT
(
city_id VARCHAR(6),
city_name VARCHAR(60)
);
第2步:创建第1步中创建的对象类型的集合(表类型)
CREATE OR REPLACE TYPE city_table_type
AS TABLE OF city_type;
第 3 步:创建一个返回第 3 步中的表类型的函数
CREATE OR REPLACE FUNCTION fnc_Get_Cities_Pipelined
RETURN city_table_type
PIPELINED
AS
BEGIN
FOR v_Rec IN (SELECT * FROM city) LOOP
PIPE ROW (city_type(v_Rec.City_Id, v_Rec.City_Name));
END LOOP;
RETURN;
END;
第 4 步:像使用“表”或“视图”一样使用函数
SELECT city_id, city_name
FROM TABLE(fnc_Get_Cities_Pipelined());
【讨论】:
以上是关于在 PL/SQL Oracle 中需要此 T-Sql 函数的等效函数。如果有其他解决方案,那么流水线的主要内容,如果未能解决你的问题,请参考以下文章