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] > <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, > >

