Archive

Posts Tagged ‘mysql’

Group_Concat di Oracle

September 9, 2008 9 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
Advertisements
%d bloggers like this: