Arrays 使用数组参数时递归SQL第1级出错

Arrays 使用数组参数时递归SQL第1级出错,arrays,oracle,recursion,Arrays,Oracle,Recursion,我已经设置了一个Oracle软件包,其过程类似于下面的代码。我必须先建立几个环球公司: CREATE OR REPLACE type cr_list_type AS object ( flag VARCHAR2(1)); CREATE OR REPLACE type t_cr_list IS TABLE OF cr_list_type; 我还在包头中定义了一个类型: type flagTableType is table of varchar2(1) index

我已经设置了一个Oracle软件包,其过程类似于下面的代码。我必须先建立几个环球公司:

CREATE
OR REPLACE type cr_list_type AS object
(
        flag VARCHAR2(1));
CREATE
OR REPLACE type t_cr_list
IS
        TABLE OF cr_list_type;
我还在包头中定义了一个类型:

type flagTableType is table of varchar2(1) index by binary_integer;
然后我创建了一个proc,如下所示:

PROCEDURE get_stuff
                   (
                           o_results OUT SYS_REFCURSOR, 
                           o_files out sys_refcursor, 
                           in_list        IN flagTableType  
                   )
IS
    v_flag_list t_cr_list;
BEGIN

    v_flag_list := t_cr_list();
    v_flag_list.extend(in_list.count);

    for i in in_list.first .. in_list.last
    loop
    v_flag_list(i) := cr_states_type(in_list(i));
    end loop;

    OPEN o_results FOR
    select MyID, MyData
    FROM   MyTable
    where  MyFlag IN (SELECT flag from TABLE(v_flag_list));

  open o_files for 
    select * from MyTableFiles a
    where a.MyID in (select  MyID
                              from MyTable
                              where MyFlag in (SELECT flag from TABLE(v_flag_list)) 
                              );
EXCEPTION
WHEN NO_DATA_FOUND THEN
    NULL; -- Normal result
end get_stuff;
最后,当我运行它时,我得到一个递归SQL级别1错误,后面是一个未解析语句错误


我没有使用递归查询。我知道它在数组中,因为如果我从第二个游标的TABLEv_flag_列表中删除in-SELECT标志并使用a='X',那么两个游标都返回值。如果我完全删除第二个游标查询,那么数组在第一个游标上运行良好。这让我很困惑

我解决了自己的问题。出于某种原因,我不得不再次将阵列投射到阵列中

open o_files for 
   select * from MyTableFiles a
   where a.MyID in (select  MyID
                    from MyTable
                    where MyFlag in 
                    (SELECT flag from TABLE(cast(v_flag_list as t_cr_states)));

我不知道为什么第一个游标不需要这样做,但第二个游标需要这样做。

消息“error occurrence at recursive SQL level 1”向我表明,错误是在触发器内部产生的。请参阅示例。此上下文中的递归是指为运行您请求的SQL而运行的SQL,例如触发器代码,或Oracle在后台代表您运行的SQL。未找到触发器。不过我什么也没做。如果我将查询更改为打开select*from MyTable files a where a.MyID in select MyID from MyTable where MyFlag in'X'、'Y'、'Z';它运行正常。我想这与嵌套select中的表转换有关;我想知道你是否还在使用早期版本。这意味着你可能,我们过去不得不在早期版本中铸造一些东西,尽管我不记得这是否与它埋在几层下面有关——我想可能是这样。你能在某处记下你的确切版本号以备将来参考吗?对不起,我一直忘了Oracle在不同的版本之间可能会有很大的不同。作为记录,我们在这个数据库上有9.2.0.7.0。谢谢,这与我当时的经验相符,我们在9.2.0.8上有这个,我相信它在10g中解决了。根据查询的复杂性,有时这只是一个问题。真遗憾,我没有及时把它挖出来帮你。