Trima Kasih Pak Awal, ya sudah saya modifikasi, sekarang fungsinya sudah berjalan sesuai rencana..
Salam, On 4/23/07, Awaluddin Hamid <[EMAIL PROTECTED]> wrote: > > Functionnya dimodifikasi aja mas Dedy > > SQL> CREATE OR REPLACE FUNCTION order_kel(v_who IN VARCHAR2) RETURN > VARCHAR2 IS > 2 v_parent VARCHAR2(12); > 3 v_no NUMBER(3); > 4 t_no VARCHAR2(30); > 5 t_who VARCHAR2(12); > 6 v_stat BOOLEAN; > 7 n NUMBER(3); > 8 l NUMBER(3); > 9 > 10 BEGIN > 11 t_no := ''; > 12 t_who := v_who; > 13 v_stat := TRUE; > 14 n := 0; > 15 WHILE v_stat LOOP > 16 SELECT parent,no INTO v_parent,v_no FROM kel WHERE who = t_who; > 17 SELECT length(max(no)) INTO l FROM kel WHERE parent = v_parent; > 18 IF v_parent IS NULL or v_parent = '0' THEN > 19 SELECT LENGTH(MAX(no)) INTO l FROM kel WHERE parent IS NULL OR > parent = '0'; > 20 v_stat := FALSE; > 21 ELSE > 22 SELECT LENGTH(MAX(no)) INTO l FROM kel WHERE parent = v_parent; > 23 END IF; > 24 t_no := LPAD(v_no,l,0)||n||t_no; > 25 t_who := v_parent; > 26 n := n + 1; > 27 END LOOP; > 28 RETURN t_no; > 29 END; > 30 / > Function created. > > Order sebelum data diubah: > SQL> SELECT who FROM kel ORDER BY order_kel(who); > WHO > ------------ > A > B > B.1.1.1 > C > > SQL> UPDATE kel SET no = 150 WHERE who = 'A'; > 1 row updated. > SQL> UPDATE kel SET no = 20 WHERE who = 'B'; > 1 row updated. > > SQL> SELECT * FROM kel; > WHO PARENT NO > ------------ ------------ --------- > A 150 > B 20 > C 3 > B.1.1.1 B 1 > > Order setelah data diubah: > SQL> SELECT who, no FROM kel ORDER BY order_kel(who); > WHO NO > ------------ --------- > C 3 > B 20 > B.1.1.1 1 > A 150 > > Sekarang sortingnya demikian, karena C berno.3 maka berada paling atas, > kemudian B (no.20) dan turunannya, terakhir A (no.150). > > Awal > > dedy afriyanto wrote: > > > > On 4/23/07, dedy afriyanto <[EMAIL PROTECTED]<dedyafriyanto%40gmail.com> > > <mailto:dedyafriyanto%40gmail.com>> wrote: > > > > > > Ya ternyata memang dari sisi modifikasinya, > > > yup saya lupa > > > t_no varchar2(18) saya besarkan ukuran length-nya > > > > > > sekarang sudah jalan cuma ada yang tidak sesuai rencana outputnya > > > seperti pada kasus Dibawah ini > > > > > > WHO PARENT NO > > > A 0 150 > > > B 0 20 > > > > > > Saya buat implentasi seperti ini > > > > > > SELECT WHO, FUNC_SORT(WHO) AS NO_SORT > > > FROM TABEL > > > ORDER BY NO_SORT > > > > > > Hasilnya seperti berikut ini > > > > > > WHO NO_SORT > > > A 1500 > > > B 200 > > > > > > Seharusnya > > > WHO > > > B > > > A > > > > > > ya tadi saya salah duga, ternyata pada pengurutan string diluar > duagaan > > > Bapak Awal ya?? > > > Trima kasih Pak Awal, > > > > > > [Non-text portions of this message have been removed]

