Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 交叉应用提供缺少的关键字错误_Oracle_Plsql_Cross Apply - Fatal编程技术网

Oracle 交叉应用提供缺少的关键字错误

Oracle 交叉应用提供缺少的关键字错误,oracle,plsql,cross-apply,Oracle,Plsql,Cross Apply,下面的查询给出了缺少的关键字错误 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_fnGetAccountId

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

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;
我不知道我哪里做错了。我对这真的很陌生

  • APPLY
    SQL语法,无论是
    CROSS-APPLY
    还是
    OUTER-APPLY
    ,都是在年引入的

    Oracle 12c版本。Oracle RDBMS的早期版本不支持
    APPLY
    SQL语法

  • 选择表格函数时,需要使用
    table()
    函数:
  • 话虽如此,您可以将查询重写如下:

    对于12c,使用
    交叉应用

     select * 
       from its_account aac 
      cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    
    对于9i及以上的车辆,请使用
    交叉连接

     select * 
       from its_account aac 
      cross join TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    
    在您的情况下没有区别-使用
    交叉连接
    将获得与使用
    交叉应用
    相同的结果

     select * 
       from its_account aac 
      cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    
  • APPLY
    SQL语法,无论是
    CROSS-APPLY
    还是
    OUTER-APPLY
    ,都是在年引入的

    Oracle 12c版本。Oracle RDBMS的早期版本不支持
    APPLY
    SQL语法

  • 选择表格函数时,需要使用
    table()
    函数:
  • 话虽如此,您可以将查询重写如下:

    对于12c,使用
    交叉应用

     select * 
       from its_account aac 
      cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    
    对于9i及以上的车辆,请使用
    交叉连接

     select * 
       from its_account aac 
      cross join TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    

    在您的情况下没有区别-使用
    交叉连接
    将获得与使用
    交叉应用

    相同的结果,我不确定您是否想要交叉连接,因为我认为您希望表有效地连接到基于
    account\u键的流水线函数的结果
    。但这也是假设两个表中都存在列。这有点不清楚,尤其是因为您没有使用传递给函数的
    account\u键

     select * 
       from its_account aac 
      cross apply TABLE(fnGetAccountIdentifier(aac.account_key)) ;
    
    因此,我认为您需要一个普通的内部联接,使用
    table
    操作符将流水线函数结果视为一个表:

    select * 
      from its_account aac 
     JOIN table(fnGetAccountIdentifier(aac.account_key)) t
     ON t.account_key = aac.account_key ;
    

    但是有很多猜测。这里是;交叉连接输出看起来没有什么用处,但只有您才能真正知道这一点,因为我已经编造了数据。

    我不确定您是否想要交叉连接,因为我认为您希望表能够有效地连接到基于
    帐户\u键的管道函数的结果。但这也是假设两个表中都存在列。这有点不清楚,尤其是因为您没有使用传递给函数的
    account\u键

    因此,我认为您需要一个普通的内部联接,使用
    table
    操作符将流水线函数结果视为一个表:

    select * 
      from its_account aac 
     JOIN table(fnGetAccountIdentifier(aac.account_key)) t
     ON t.account_key = aac.account_key ;
    
    但是有很多猜测。这里是;交叉连接输出看起来没有什么用处,但只有您才能真正知道这一点,因为我已经编造了数据。

    我想您可能是指,但这似乎不正确。Oracle没有
    APPLY
    。假设
    tt\uu fngeaccountidentifier
    有一个
    account\u键
    字段,为什么不用普通的内部联接将这两个表联接在一起呢?如果您确实需要可以在键上连接到
    表(its.fngeaccountidentifier)
    的函数-您没有使用当前传入的键值?我想您可能是这个意思,但这似乎不正确。Oracle没有
    APPLY
    。假设
    tt\uu fngeaccountidentifier
    有一个
    account\u键
    字段,为什么不用普通的内部联接将这两个表联接在一起呢?如果您确实需要可以在键上连接到
    表(its.fngeaccountidentifier)
    的函数-您现在没有使用传递的键值吗?