Arrays 使用数组参数时递归SQL第1级出错
我已经设置了一个Oracle软件包,其过程类似于下面的代码。我必须先建立几个环球公司: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
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中解决了。根据查询的复杂性,有时这只是一个问题。真遗憾,我没有及时把它挖出来帮你。