Pertama-tama kita akan mencoba membuat table dengan nama table TB_COLUMNTOROW terlebih dalulu sebelum mencoba conversi
CREATE TABLE TB_COLUMNTOROW ( ID INTEGER, NAMA VARCHAR2(200 BYTE) )
Jika table sudah di buat maka langkah selanjutnya kita akan mengisi data table tersebut terlebih dahulu
Langkah selanjutnya kita akan mencoba menggabungkan nama kedua row tersebut menjadi satu kolom, scriptnya seperti berikut ini :
1.Menggunakan Oracle 9i xmlagg
Di Oracle 9i dan seterusnya kita bisa menggunakan fungsi xmlagg untuk menggabungkan beberapa baris ke satu kolom:
SELECT ID,RTRIM (XMLAGG (XMLELEMENT (E, NAMA || ',')).EXTRACT ('//text()'), ',') NAMA FROM TB_COLUMNTOROW GROUP BY ID
Hasilnya akan terlebih seperti berikut ini :
Jika idnya tidak di samakan maka kolom tersebut tidak ada bisa bergabung menjadi satu row, dikarenakan di sini kita menggunakan group by
2. Menggunakan 11g within group SQL
Di Oracle 11g, kita memiliki klausa SQL dalam kelompok dari beberapa baris menjadi satu baris satu baris. Hal ini juga memungkinkan beberapa nilai kolom tabel ditampilkan dalam satu kolom, dengan menggunakan fungsi built-in listagg:
SELECT ID, LISTAGG (NAMA, ',') WITHIN GROUP (ORDER BY NAMA) NAMA FROM TB_COLUMNTOROW GROUP BY ID
Hasilnya :
3. Menggunakan fungsi PL/SQL
Anda dapat menulis fungsi PL / SQL untuk menampilkan beberapa baris nilai pada satu baris. Martin Chadderton telah menulis fungsi Pl / SQL yang disebut “stragg” yang dapat Anda definisikan untuk menampilkan beberapa baris SQL pada satu baris tunggal. Sciptnya sanggat simpel hanya satu baris jika anda tidak mau ribet silahkan gunakan query berikut ini :
SELECT STRAGG(NAMA) AS NAMA FROM TB_COLUMNTOROW;
4. Menggunakan Fungsi rowtocol
Gunakan fungsi rowtocol untuk mengonversi baris ke kolom, jika ini menggunakan fungsi ini kita harus membuat functionnya terlebih dahulu seperti berikut :
CREATE OR REPLACE FUNCTION ROWTOCOL (P_SLCT IN VARCHAR2,
P_DLMTR IN VARCHAR2 DEFAULT ',')
RETURN VARCHAR2
AUTHID CURRENT_USER
AS
TYPE C_REFCUR IS REF CURSOR;
LC_STR VARCHAR2 (4000);
LC_COLVAL VARCHAR2 (4000);
C_DUMMY C_REFCUR;
L NUMBER;
BEGIN
OPEN C_DUMMY FOR P_SLCT;
LOOP
FETCH C_DUMMY INTO LC_COLVAL;
EXIT WHEN C_DUMMY%NOTFOUND;
LC_STR := LC_STR || P_DLMTR || LC_COLVAL;
END LOOP;
CLOSE C_DUMMY;
RETURN SUBSTR (LC_STR, 2);
/*
EXCEPTION
WHEN OTHERS THEN
lc_str := SQLERRM;
IF c_dummy%ISOPEN THEN
CLOSE c_dummy;
END IF;
RETURN lc_str;
*/
END;
/
cara memanggil fungsi tersebut seperti berikut ini :
SELECT DISTINCT ROWTOCOL('SELECT NAMA FROM TB_COLUMNTOROW')AS ALL_NAMA FROM DUAL
akan tetapi dengan rowtocol kelemahannya kita harus membuat fungsi rowtocal terlebih dahulu
Kesimpulannya Hasil menggunakan xmlagg, within group SQL, Fungsi PL/SQL, dan Fungsi rowtocol hasilnya sama, jadi silahkan sesuai selera anda akan menggunakan fungsi yang mana.





