以下查询显示缺少关键字错误..
select *
from its_account aac
CROSS APPLY its.fnGetAccountIdentifier(aac.account_key) ;
这是我的功能:
create or replace FUNCTION fnGetAccountIdentifier
(
v_AccountKey IN NUMBER
)
RETURN fnGetAccountIdentifier_pkg.tt_fnGetAccountIdentifier_type PIPELINED
AS
v_temp SYS_REFCURSOR;
v_temp_1 TT_FNGETACCOUNTIDENTIFIER%ROWTYPE;
BEGIN
OPEN v_temp FOR
SELECT *
FROM tt_fnGetAccountIdentifier;
LOOP
FETCH v_temp INTO v_temp_1;
EXIT WHEN v_temp%NOTFOUND;
PIPE ROW ( v_temp_1 );
END LOOP;
END;
我不知道我在哪里做错了。我真的很陌生。
答案 0 :(得分:7)
APPLY
SQL语法,无论是CROSS APPLY
还是OUTER APPLY
都是在
Oracle 12c版。 Oracle RDBMS的早期版本不支持APPLY
SQL语法。
TABLE()
功能:话虽如此,您可以按如下方式重写查询:
对于12c 使用cross apply
。
select *
from its_account aac
cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
对于9i 及以上使用cross join
。
select *
from its_account aac
cross join TABLE(fnGetAccountIdentifier(aac.account_key)) ;
在您的情况下,没有任何区别 - 您使用cross join
获得与使用cross apply
时相同的结果。
答案 1 :(得分:1)
我不确定你是否想要一个交叉连接,因为我认为你希望该表能够有效地加入基于account_key
的流水线函数的结果。但是,这也假设两个表中都存在列。这有点不清楚,尤其是因为你没有使用你传递给函数的account_key
。
所以我认为你想要一个正常的内连接,使用table
运算符将流水线函数结果视为一个表:
select *
from its_account aac
JOIN table(fnGetAccountIdentifier(aac.account_key)) t
ON t.account_key = aac.account_key ;
但那里有很多猜测。这是an SQL Fiddle showing the results of that join and a cross join;交叉连接输出看起来不太有用,但只有你真的知道,因为我已经完成了数据。