2017-04-10 64 views
0

我一般的問題是,我有10000個不同的數字作爲一個列表(即13,22,443,...,5010 - 沒有在表中,也不能創建他們的表),我需要通過這些數字中塊循環(1..100,101..200,202..300等 - 首100號,毗鄰100號等...)轉換列行

我的第一個反應是創造一個遊標和循環與LIMIT子句中,但我不知道是否有可能。

有什麼辦法來定義這些特定值的光標?如果不是,有人可以給我一些其他的可能性嗎?

也許選擇所有值從雙和列將其轉化爲行,從這裏創建一個遊標,這可能嗎?

謝謝

+0

難道其中有恰好是100001和10000,或只是一個隨機的(ISH)號碼列表之間的所有數字? – BriteSponge

+0

這些數字是隨機的(ish),例如,第678個數字可以是1940049,但count(all_numbers)= 10000。 – mikcutu

+0

因此,大概你在某個列表中有數字?也許是另一個數據庫或文件。 。 。如果是這樣,那麼你可以鏈接到其他數據庫或爲數字列表文件創建一個外部表定義,並在遊標循環中使用它。 – BriteSponge

回答

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; 
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或任何其它數據類型),並遍歷所有該集合中的元素。