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

Kirim email ke