arrays - 使用数组参数时出现递归 SQL Lvl 1 错误

标签 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 by binary_integer;

然后我创建了一个过程,如下所示:

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 级错误发生的错误,然后是无语句解析错误。

我没有使用递归查询。我知道它在数组中,因为如果我从第二个游标中删除“in (SELECT flag from TABLE(v_flag_list))”并使用“= '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)));

我不知道为什么这对于第一个光标来说不是必需的,但对于第二个光标来说是必需的。

关于arrays - 使用数组参数时出现递归 SQL Lvl 1 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574219/

相关文章:

Python 循环内的递归调用。它是如何工作的?

haskell - OCaml 中的相互递归类型

javascript - 将 javascript 字符串转换为 php 数组

java - Spring 批量 & ORA-01792 : maximum number of columns in a table or view is 1000

sql - 如何更改 Oracle View 中的列数据类型?

oracle - 在oracle中将where子句动态添加到游标

java - 搜索对象数组

javascript - 在java脚本的字符串中引用单个字符(单词)

arrays - 将数组与引用数组中的值匹配 - Perl

python - Towers of Hanoi Python——理解递归