Facebook Twitter RSS Feed

Membuat Index Auto Increment pada Tabel di Oracle

Salah satu kendala dalam  pembuatan tabel detail transaksi dalam suatu database oracle adalah pemberian value pada kolom primary key. Dalam kondisi seperti ini, memang data primary tidak terlalu diperlukan dan hanya difungsikan sebagai sebuah identitas unik saja. Karena data yang diperlukan adalah data primary key dari tabel master yang menjadi foreign key pada tabel detail transaksi. Tapi sayangnya kita memang harus mengisi data primary key dari setiap record pada tabel detail transaksi kalo tidak akan terjadi redudancy data. Oracle berbeda dengan database MySQL yang memang mendukung fungsi auto increment pada saat mendeklarasikan kolom dalam suatu tabel.
Solusi dari masalah ini dulu saya siasati dengan memasukkan id 0 untuk record pertama dan pada saat menampilkan seluruh data saya akali dengan menampilkan id yang lebih besar dari 0 jadi record saya yang id = 0 tidak akan ditampilkan. Dan ternyata oracle sendiri mempunyai fitur sendiri untuk mengatasi masalah auto increment pada tabel. So, salah satu solusinya adalah kita membuat nilai auto increment pada kolom primary key tersebut menggunakan sequence dan trigger, tentu saja untuk kolom dengan tipe data bilangan.
Langkah pertama tentunya kita harus membuat tabelnya terlebih dahulu.
sql>create table tbl_name(
->id number primary key,
->name varchar2(50));
Pada kolom id akan kita buat index auto increment. Langkah selanjutnya kita membuat sebuah sequence. Sequence sendiri adalah sebuah object yang berfungsi sebagai auto number generator yang akan menghasilkan angka yang berurutan (unique).
sql>create sequence sq_name 
->start with 1
->increment by 1;
Dari sequence yang telah kita buat diatas maka id pertama akan diberi nilai 1 dan dilakukan penambahan 1 buat id record selanjutnya. Untuk statement dari sequence bisa disesuaikan dengan kebutuhan.
Selanjutnya adalah membuat trigger. Trigger adalah blok PL/SQL yang disimpan di dalam database dan akan dieksekusi ketika kita melakukan perintah-perintah SQL dalam DML (Data Manipulation Language) yang meliputi DELETE, UPDATE atau INSERT pada sebuah tabel. Fungsi dari trigger ini sendiri adalah untuk membantu dalam menjaga integritas dan konsistensi data. Pada studi kasus ini, kita akan memanggil trigger sebelum melakukan proses insert pada tbl_name.
sql>CREATE OR REPLACE TRIGGER TR_NAME
->BEFORE INSERT
->ON tbl_name
->REFERENCING NEW AS NEW
->FOR EACH ROW
->BEGIN
->SELECT SQ_NAME.nextval INTO :NEW.ID FROM dual;
->END;
TR_NAME adalah nama trigger yang kita buat. tbl_name adlah nama tabel yang mana akan dilakukan proses suto increment. SQ_NAME adlah nama sequence yang telah kita definisikan diatas. :NEW.ID adalah primary key dari tabel yang nilainya akan diisi dengan nilai auto increment.
Untuk membuktikan apakah proses auto increment berhasil cobalah insert data pada tabel.
sql>insert into tbl_name values(sq_name.nextval,'Yanuar');
sql>insert into tbl_name (name) values('Rezqi');
Semoga berhasil. :D

0 comments:

Post a Comment