交叉申请提供缺少关键字错误

Sha*_*mar 1 oracle plsql cross-apply

以下查询给出了缺少的关键字错误..

select * 
  from its_account aac 
 CROSS APPLY its.fnGetAccountIdentifier(aac.account_key) ;
Run Code Online (Sandbox Code Playgroud)

这是我的功能:

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;
Run Code Online (Sandbox Code Playgroud)

我不知道我在哪里做错了.我真的很陌生.

Nic*_*nov 7

  1. APPLYSQL语法,它是否CROSS APPLY还是OUTER APPLY在被引入

    Oracle 12c版本.Oracle RDBMS的早期版本不支持APPLYSQL语法.

  2. 从表格函数中选择时,您需要使用以下TABLE()功能:

话虽如此,您可以按如下方式重写查询:

适用于12c使用cross apply.

 select * 
   from its_account aac 
  cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
Run Code Online (Sandbox Code Playgroud)

对于9i及以上使用cross join.

 select * 
   from its_account aac 
  cross join TABLE(fnGetAccountIdentifier(aac.account_key)) ;
Run Code Online (Sandbox Code Playgroud)

在您的情况下没有区别 - 您将使用cross join您使用的相同结果cross apply.