Oracle Stored Procedure: Membaca Dan Menulis Ke File Excel


Seseorang pernah bertanya bagimana membaca dan menulis file Excel melalui API PL/SQL (tanpa memakai Oracle Form, dsb). Tentu saja yang pertama kali terbayang dalam pikiranku adalah googling dulu. Aku menemukan beberapa alternatif solusi, seperti menulis dan membaca dalam format CSV untuk di-export dan di-import ke file XLS. Tapi tidak ada cara gampang untuk membaca format native Excel. Bagaimana jika si-penanya bersikeras untuk tetap ingin database-nya bisa membaca file Excel native melalui stored procedure? Stored procedure dalam Oracle tidak harus selalu berupa PL/SQL, kenapa tidak mencoba Java? Apache POI adalah salah satu API open source berbasis Java untuk membaca dan menulis file native Excel & Word. Aku akan mencoba mensimulasikan apa yang ingin dicapai oleh si-penanya melalui langkah-langkah sederhana berikut.

Pertama-tama, aku men-download JAR Apache POI dan memasukkannya ke dalam database Oracle agar dapat di-referensi oleh stored procedure Java nantinya. Perintah yang aku berikan kira-kira seperti berikut:

loadjava -u snake/password poi-3.2-FINAL-20081019.jar

Lalu, aku membuat program Java yang nantinya akan dijalankan oleh database Oracle, seperti berikut:

import java.io.File;
import java.io.FileInputStream;

import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;


public class ExcelFile {

  public static String read(String dataFile) {
    try {
      POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(new File(dataFile)));
      HSSFWorkbook wb = new HSSFWorkbook(fs);
      HSSFSheet sheet = wb.getSheetAt(0);
      HSSFRow row = sheet.getRow(1);
      String str = row.getCell(0).getRichStringCellValue().getString();
      return str;
    } catch (Exception e) {
      return e.getMessage();
    }
  }

}

Karena sedang coding dengan terburu-buru, aku membuat method read() dengan argumen berupa file Excel yang ingin dibaca. Tentu saja, pada kenyataannya, akan lebih baik jika ini berupa data BLOB (jika file Excel berada pada host yang berbeda) atau BFILE (jika file Excel berada pada host yang sama). Fungsi sederhana ini akan mengembalikan nilai String dari baris kedua dan kolom pertama. Setelah men-compile file ini, aku memasukkannya ke dalam database Oracle dengan perintah seperti berikut di command prompt:

loadjava -u snake/password ExcelFile.class

Kemudian, aku membuat PL/SQL wrapper untuk class Java, seperti berikut:

CREATE  OR REPLACE FUNCTION bacaExcel (namaFile IN VARCHAR2) RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'ExcelFile.read(java.lang.String) return java.lang.String';

Selanjutnya, masih dalam keadaan terburu-buru, aku harus memberikan permission agar stored procedure Java di schema SNAKE boleh membaca dan menulis file di direktori yang aku tentukan. Agar tidak rumit, aku login sebagai user yang memiliki akses administrasi Java, misalnya SYS, dan memberikan wewenang agar program Java di schema SNAKE boleh membaca dan menulis seluruh file:

call dbms_java.grant_permission('SNAKE', 'java.io.FilePermission', '<<ALL FILES>>', 'read,write' );

Sekarang, aku siap menggunakan stored procedure untuk membaca file Excel tersebut, misalnya seperti berikut:

SELECT bacaExcel('C:\sample.xls') FROM DUAL;

yang akan menghasilkan nilai dari cell A2 di sheet pertama di file C:\sample.xls. Proses pembuatan stored procedure menjadi cepat dan sederhana berkat Java yang didukung oleh komunitas open-source sehingga memiliki banyak API untuk berbagai kebutuhan🙂 Jadi tidak harus selalu PL/SQL, bukan?

Perihal Solid Snake
I'm nothing...

2 Responses to Oracle Stored Procedure: Membaca Dan Menulis Ke File Excel

  1. yandhajperdana mengatakan:

    kakak file ini poi-3.2-FINAL-20081019.jar ditaro dimana ya seharusnya, karena ada “error: package org.apache.poi.hssf.usermodel does not exist”

    • Solid Snake mengatakan:

      File jar-nya di-load ke schema dengan perintah command line loadjava..
      Saat berada di direktori yang mengandung file jar tersebut, berikan perintah seperti:
      loadjava -u namauser/password poi-3.2-FINAL-20081019.jar
      untuk memindahkan isi jar ke schema database.

Apa komentar Anda?

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: