将列转换为行

convert columns in rows

我的一般问题是我有 10000 个不同的数字列表(即 13、22、443、...、5010 - 不在 table 中并且无法创建 table其中),我需要以块的形式遍历这些数字(1..100、101..200、202..300 等 - 第 100 个数字,接下来的 100 个数字等等......)

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

有什么方法可以用这些特定值定义游标吗?如果没有,有人可以建议我一些其他的可能性吗?

也许 select 来自 dual 的所有值并将它们从列转换为行,然后从这里创建一个游标,这可能吗?

谢谢,

您可以指定具有这些特定值的 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 或任何其他数据类型)并遍历该集合中的所有元素。

我发现了这个:

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;