Thursday, 14 June 2012

Membuat auto increment di table Oracle

Hai nyoh, udah lama ga nulis sesuatu di blog ini. Sekarang gw mau nulis lagi ah. Berhubung kemarin sore nemu bahan kemarin sore pas temen gw nanya sesuatu. Dialognya kaya gini lah kira-kira:

T = Temen gw
G = Gw yang ganteng :P

T = Oi tong...
G = Apa om???
T = Nanya dong, kalo bikin auto increment di table Oracle kaya gimana sih?
G = Oh gini om caranya... bla bla bla... auuuuuu (ntar gw jelasin dulu)

Sebelumnya apaan sih nyoh yang dimaksud Auto Increment?? Menurut ilmu sotoy gw... auto increment adalah nilai integer/number yang bertambah secara otomatis. Udah jelas kan ada auto artinya otomatis, dan increment artinya bertambah. Hahaha... Biasanya dipakai untuk nilai field di suatu table. Jadi waktu ntu table nambah Rownya, field tersebut ga usah dikasih nilai udah bisa ngisi otomatis nilainya nyoh.

Contoh misalnya kaya gini nih: (nama table misal xxmhs)


|mhs_id | mhs_name     |
|=======|==============|
|1      |hiruma111     |
|2      |HiddenSkills  |
|3      |kentuy        |
|4      |otaknakal     |
|5      |taku555       |


Waktu insert record ke table tersebut, mhs_id tidak perlu diisi nilainya. Cukup insert mhs_name aja. Misal sintaxnya gini

Insert into xxmhs (mhs_name) values ('kodok');


Nah kalo ga pake auto increment itu ga bakal bisa keisi nilai mhs_id nya. Kalau udah yang kenal MySQL mungkin sangat mudah buat auto Increment di MySQL. Tinggal kasih sintax auto_increment KEY pada saat tablenya dibuat atau bisa di alter aja tablenya


Contoh di MySQL saat Create Table:



CREATE TABLE xxmhs (
        mhs_id INT NULL AUTO_INCREMENT KEY,
        mhs_name VARCHAR(200)
);


Trus balik lagi ke pertanyaan, emangnya kalo di Oracle ga bisa nyoh kaya gitu? Dengan rasa berduka dan bersedih, gw jawab tidak bisa... hahaha... (kok ketawa sih?)... Karena gw dah punya solusinya nyoh.. tenang aja...


Ini langkah2nya nyoh:


Create table xxmhs terlebih dahulu.

CREATE TABLE XXMHS
(
  mhs_id    NUMBER,
  mhs_name  VARCHAR2(100)
)


Lalu buat sebuah sequence, scriptnya sebagai berikut:

CREATE SEQUENCE XXMHS_SEQ
START WITH 1
INCREMENT BY 1
MINVALUE 0
MAXVALUE 9999999
NOCACHE 
NOCYCLE 
NOORDER 


Sebenarnya ga masalah juga kalo mau buat sequencenya dulu nyoh. Ga ada masalah.
Lalu sekarang kita pasang sequence tersebut ke table yang udah dibuat ataupun table yang akan dibuat. Caranya dengan memasang di trigger table tersebut. Bisa ditaruh di trigger Before Insert pada table tersebut. Scriptnya sebagai berikut:


CREATE OR REPLACE TRIGGER XXMHS_BI
BEFORE INSERT
ON XXMHS 
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW
DECLARE
tmpVar NUMBER;


BEGIN
   tmpVar := 0;


   SELECT XXMHS_SQEQ.NEXTVAL INTO tmpVar FROM dual;
   :NEW.MHS_ID := tmpVar;
   
   EXCEPTION
     WHEN OTHERS THEN
       RAISE;
END XXMHS_BI;
/

Jadi deh... Selamat mencoba... semoga membantu dan dapet pahala... amin... hahahaha



1 comments:

Octo said...

kalo dengan syarat atau berpacuan dengan primary key gmn caranya gan ?
thx

Post a Comment