转换行中的列

时间:2017-04-10 14:38:18

标签: oracle cursor limit chunks

我的一般问题是我有10000个不同的数字作为列表(即13,22,443,...,5010 - 不在表中而不能创建它们的表)我需要循环这些大块数字(1..100,101..200,202..300等 - 第一个100号,下一个100号等等......)

我的第一反应是使用LIMIT子句创建一个游标并在其中循环,但我不确定它是否可行。

有没有办法用这些特定的值定义游标?如果不是,有人可以建议我一些其他的可能性,拜托?

也许从双重中选择所有值并将它们从列转换为行并从此处创建游标,是否可能?

谢谢,

2 个答案:

答案 0 :(得分:0)

您可以使用这些特定值指定PL/SQL collection

DECLARE
  TYPE t_table IS TABLE OF PLS_INTEGER;
  v_list t_table;
BEGIN
  v_list := t_table(13, 22, 443, 5010);
  FOR n IN v_list.FIRST .. v_list.LAST LOOP
    dbms_output.put_line(v_list(n));
  END LOOP;
END;
/

13
22
443
5010

这将创建PLS_INTEGERS的集合(也可以是NUMBER或任何其他数据类型)并循环遍历该集合中的所有元素。

答案 1 :(得分:0)

我发现了这个:

cursor c is
    with test as
        (select 709941, 709959, 710165, 710183, 710199, 710201, 710203, 710220, 710352, 710571, 710630, 710710, 710714, 710723, 710724, 710761, 710845, 710877, 710878, 710892, 710908, 710915' col from dual)
            select regexp_substr(col, '[^;]+', 1, level) result
            from test
            connect by level <= length(regexp_replace(col, '[^;]+')) + 1;