Home > Articles > Group_Concat di Oracle

Group_Concat di Oracle

September 9, 2008 Leave a comment Go to comments

fungsi group_concat (seringnya mysql c) biasanya digunakan untuk menggabungkan row hasil query dengan menggunakan format tertentu (di mysql). kalau anda ingin mengetahui lebih lanjut tentang penggunaan group concat ini, silahkan baca manual mysql.

lalu bagaimana group_concat di oracle ???. pertanyaan ini muncul ketika saya mau tidak mau harus menerapkan group_concat, sedangkan di oracle sendiri tidak ada fungsi bawaan group_concat seperti di mysql. setelah menimba ilmu dengan melakukan searching di uncle google, akhirnya ketemu juga bagaimana cara menerapkan group_concat di oracle.

untuk itu kita perlu membuat type dan function di oracle yang nantinya akan berfungsi layaknya group_concat di mysql.

berikut script yang perlu dituliskan :

create or replace type string_agg_type as object (
total varchar2(4000),

static function ODCIAggregateInitialize(sctx IN OUT string_agg_type )
return number,

member function ODCIAggregateIterate(self IN OUT string_agg_type, value IN varchar2 )
return number,

member function ODCIAggregateTerminate(self IN string_agg_type, returnValue OUT varchar2, flags IN number)
return number,

member function ODCIAggregateMerge(self IN OUT string_agg_type, ctx2 IN string_agg_type)
return number
);
/

create or replace type body string_agg_type is
static function ODCIAggregateInitialize(sctx IN OUT string_agg_type)
return number
is
begin
sctx := string_agg_type( null );
return ODCIConst.Success;
end;

member function ODCIAggregateIterate(self IN OUT string_agg_type, value IN varchar2 )
return number
is
begin
self.total := self.total || ‘|’ || value;
return ODCIConst.Success;
end;

member function ODCIAggregateTerminate(self IN string_agg_type, returnValue OUT varchar2, flags IN number)
return number
is
begin
returnValue := ltrim(self.total,’|’);
return ODCIConst.Success;
end;

member function ODCIAggregateMerge(self IN OUT string_agg_type, ctx2 IN string_agg_type)
return number
is
begin
self.total := self.total || ctx2.total;
return ODCIConst.Success;
end;
end;
/

create or replace function group_concat(input varchar2)
return varchar2
parallel_enable aggregate using string_agg_type;
/
setelah script diatas di compile, kita bisa menggunakannya dalam query. fungsi diatas akan membuat group concat dengan separato pipeline ‘|’. yang menghasilkan penggabungan array record dalam bentuk string dengan separator pipeline. bacaan lebih lanjut, ada disini  http://kb.yarmakconsulting.com/2008/06/oracle-analog-of-mysql-groupconcat.html
  1. October 6, 2008 at 3:59 am

    duh berat amat to isine blog mu choi

  2. October 9, 2008 at 1:17 am

    hehehe, nulis itu g sengaja mas yog, biar nanti ketika menemukan masalah yang sama g bingung lagi…

  3. febrian
    December 10, 2008 at 12:11 pm

    ora mudeng aku rul.
    mantap lah, maju terus….

  4. December 11, 2008 at 6:13 am

    wuih…. mantabz….

    ternyata mysql menginspirasi orang untung lebih kreatip lagih😀

  5. December 12, 2008 at 6:00 am

    kebetulan aja… harus bikin group concat gara2x query yang sangat komplex..hiks2x :((

  6. Buddy
    July 7, 2010 at 8:32 am

    mantap mas irul….
    thx atas share scriptnya mas, aq kebetulan lagi cari group concat di oracle nih😀

    aq modif dikit biar separatornya bisa fleksibel.

  7. December 21, 2011 at 2:30 am

    Mantap [pake p, bukan b, nggak kolkolah jare Mas Akhsan]😀

  8. October 24, 2014 at 12:45 am

    mengapa saat kami jalankan script ke-2 (create or replace type body string_agg_type) muncul error ini : “Warning: Type Body created with compilation errors.”

    • October 24, 2014 at 12:53 am

      kemungkinan karena penggunaan tanda `(italic single quote) pada script diatas, kalau anda hanya mengkopi paste dari script diatas silahkan tanda `(italic single quote) diganti dengan ‘(single quote)

  1. No trackbacks yet.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: