所以,這裏是你的原始數據:
SQL> select * from t23
2/
ID NAM PARENT_ID
---------- --- ----------
1 abc 0
2 efg 1
3 hij 1
4 klm 2
5 nop 3
SQL>
此過程填充一個PL/SQL集合與現存行。它通過這些行循環,用一個由原始ID索引的新ID填充一個關聯數組。 (請注意,賦值使用11g語法獲取序列值,而不是從DUAL中選擇傳統)。然後將ID變爲新值,並使用存儲在關聯數組中的值更新PARENT_ID。最後,新行被插入到表中使用大量FORALL
語法,
SQL> declare
2 type num_lookup is table of pls_integer
3 index by pls_integer;
4 id_translate num_lookup;
5
6 type t23_nt is table of t23%rowtype;
7 new_rows t23_nt;
8 begin
9 select *
10 bulk collect into new_rows
11 from t23
12 order by id asc;
13
14 for i in new_rows.first()..new_rows.last()
15 loop
16 id_translate(new_rows(i).id) := s23.nextval;
17 new_rows(i).id := s23.currval;
18 if new_rows(i).parent_id != 0
19 then
20 new_rows(i).parent_id := id_translate(new_rows(i).parent_id);
21 end if;
22 end loop;
23
24 forall j in new_rows.first()..new_rows.last()
25 insert into t23 values new_rows(j);
26
27 end;
28/
PL/SQL procedure successfully completed.
SQL>
而且,瞧!
SQL> select * from t23;
ID NAM PARENT_ID
---------- --- ----------
1 abc 0
2 efg 1
3 hij 1
4 klm 2
5 nop 3
6 abc 0
7 efg 6
8 hij 6
9 klm 7
10 nop 8
10 rows selected.
SQL>
來源
2011-05-03 11:05:49
APC
我只能推斷你想要重複第1到第6行。但是我不明白爲什麼要使用什麼規則?說真的,試着把你的問題看作是一個只有你提供的有關你的任務的信息的人。你應該認識到,沒有辦法無意中想出正確的答案。 – 2011-05-03 10:14:23
請發佈您迄今爲止編寫的代碼。人們通常不喜歡只爲你寫代碼。事實上,這是一個工作描述,而不是一個問題。 – 2011-05-03 10:15:35