Anda di halaman 1dari 45

LAPORAN PRAKTIKUM BASIS DATA

SEQUENCE & TRIGGER

DISUSUN OLEH :
ADITYA LUKY WIBOWO
M0513002
ASISTEN : 1. ALFI MUHAMMAD ANWAR (M0512003)
2. AMELIA RAHMAN (M0512004)
3. RIO PAHLEVY R. Y. B. (M0512048)
4. YANIAR RAHMAH (M0512059)

JURUSAN INFORMATIKA
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
SURAKARTA
SELASA, 9 DESEMBER 2014

BAB 1 PENDAHULUAN

1.1

TUJUAN PRAKTIKUM
1) Memahami dan mampu menggunakan command Sequences & Trigger pada
Oracle.
2) Memahami hasil output dari command Sequences & Trigger pada Oracle.

1.2

DASAR TEORI
Sequence

merupakan

objek

database

yang

digunakan

untuk

membangkitkan serangkaian nilai serial yang unik agar dapat dimanfaatkan


untuk primary key dalam sebuah tabel.
Syntax untuk Membuat Sequence :
CREATE SEQUENCE sequence_name
MINVALUE value
MAXVALUE value
START WITH value
INCREMENT BY value
CACHE value;

Setelah membuat sequence dengan menuliskan syntax pada contoh


diatas, selanjutnya lakukan query untuk melihat hasil sequence dengan
menuliskan syntax sebagai berikut :
select sequence_name.nextval from dual;

Trigger merupakan object di Oracle yang digunakan untuk menjalankan


fungsi tertentu ketika kondisi yang menjadi pemicu terjadi. Berikut beberapa jenis
Trigger:
1. After Delete Trigger
Trigger ini akan dijalankan setelah operasi DELETE dilakukan
2. After Insert Trigger
Trigger ini akan dijalankan setelah operasi DELETE dilakukan

3. After Update Trigger


Trigger ini akan dijalankan setelah operasi UPDATE dilakukan
4. Before Delete Trigger
Trigger ini akan dijalankan sebelum operasi DELETE dilakukan
5. Before Insert Trigger
Trigger ini akan dijalankan sebelum operasi insert di lakukan.
6. Before Update Trigger
Trigger ini akan dijalankan sebelum operasi update di lakukan.
Syntax untuk Trigger:
CREATE [ OR REPLACE ] TRIGGER trigger_name
AFTER/BEFORE DELETE/INSERT/UPDATE
ON table_name
[ FOR EACH ROW ]

DECLARE
-- variable declarations

BEGIN
-- trigger code

EXCEPTION
WHEN ...
-- exception handling

END;

BAB 2 ANALISA

2.1

PERMASALAHAN
Studi kasus dalam praktikum ini adalah mempelajari penggunaan
command Sequences & Trigger pada Oracle.. Maka permasalahan dalam
praktikum ini adalah:
1) Membuat sequence & trigger yang sudah ditentukan pada contoh dan soal
latihan dalam modul LABWORK 7.
2) Menjelaskan hasil output dari command Sequences & Trigger yang sudah
dilakukan.

2.2

PEMBAHASAN
A. Sequence
1) Contoh 1:
Membuat Sequence supplier_seq :
CREATE SEQUENCE supplier_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;

Melihat Hasil Sequence supplier_seq :


select supplier_seq.nextval from dual;

Hasil Percobaan :

Membuat Sequence supplier_seq

Melihat Hasil Sequence supplier_seq pada percobaan PERTAMA

Melihat Hasil Sequence supplier_seq pada percobaan KEDUA

Melihat Hasil Sequence supplier_seq pada percobaan KETIGA

Penjelasan :
Contoh pembuatan sequence diatas adalah membuat sequence
bernama supplier_seq yang memiliki nilai minimal 1 dan maksimal
999999999999999999999999999. Urutan dimulai dari angka 1 dan akan
selalu ditambahkan 1. Sequence akan memiliki cache up sebanyak 20
nilai untuk performa, karena cache ini dinyatakan untuk menyimpan nilai
di dalam memory yang dapat diakses secara cepat. Kelemahan dari
penggunaan cache ini adalah apabila sistem down/gagal, maka nilai dari
sequence yang sudah disimpan dalam cache akan hilang sehingga urutan
nomor yang ada akan loncat ke lain.
Setelah dilakukan pembuatan sequence, selanjutnya akan dilihat
hasilnya dengan mengetikkan query select (sudah dijelaskan pada dasar
teori). Ketika diklik Run untuk pertama kalinya tabel nextval akan
menampilkan nilai 1. setelah itu dilakukan percobaan klik Run untuk
kedua kalinya dan tabel nextval akan menampilkan nilai 2, dan
seterusnya. Maka didapat kesimpulan bahwa nilai yang terdapat dalam
tabel nextval akan selalu naik nilainya tergantung berapa kali user mengklik Run untuk query select tersebut.

2) Contoh 2:
Membuat Sequence supplier_seq tanpa cache :
CREATE SEQUENCE supplier_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1
NOCACHE;

ATAU dapat juga dibuat Sequence supplier_seq tanpa statement


cache :
CREATE SEQUENCE supplier_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1

Melihat Hasil Sequence supplier_seq :


select supplier_seq.nextval from dual;

Hasil Percobaan :

Membuat Sequence supplier_seq tanpa cache :

ATAU dapat juga dibuat Sequence supplier_seq tanpa statement


cache :

Melihat

Hasil

Sequence

percobaan PERTAMA

supplier_seq

tanpa

cache

pada

Melihat

Hasil

Sequence

supplier_seq

tanpa

cache

pada

supplier_seq

tanpa

cache

pada

percobaan KEDUA

Melihat

Hasil

Sequence

percobaan KETIGA

Penjelasan :
Berdasarkan hasil percobaan diatas, untuk penyederhanaan dapat
juga dibuat sequence tanpa menyatakan nilai maksimum. Apabila tidak
ingin

disimpan

dalam

cache

dapat

juga

dibuat,

yaitu

dengan

menghilangkan cache pada saat membuat sequences.


Penjelasan yang sama dengan Contoh 1, setelah dilakukan
pembuatan

sequence,

selanjutnya

akan

dilihat

hasilnya

dengan

mengetikkan query select (sudah dijelaskan pada dasar teori). Ketika


diklik Run untuk pertama kalinya tabel nextval akan menampilkan nilai 1.
setelah itu dilakukan percobaan klik Run untuk kedua kalinya dan tabel
nextval akan menampilkan nilai 2, dan seterusnya. Maka didapat
kesimpulan bahwa nilai yang terdapat dalam tabel nextval akan selalu
naik nilainya tergantung berapa kali user meng-klik Run untuk query
select tersebut.

3) LATIHAN
Buatlah

sequence

dengan

nama

items_pakaian_seq,

items_aksesoris_seq, dan orders_seq!

Membuat Sequence items_pakaian_seq tanpa statement cache :


CREATE SEQUENCE items_pakaian_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1

Membuat Sequence items_aksesoris_seq tanpa statement cache :


CREATE SEQUENCE items_aksesoris_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1

Membuat Sequence orders_seq tanpa statement cache :


CREATE SEQUENCE orders_seq
MINVALUE 1
START WITH 1
INCREMENT BY 1

Melihat Hasil Sequence items_pakaian_seq :


select items_pakaian_seq.nextval from dual;

Melihat Hasil Sequence items_aksesoris_seq :


select items_aksesoris_seq.nextval from dual;

Melihat Hasil Sequence orders_seq :


select orders_seq.nextval from dual;

Hasil Percobaan :

Membuat Sequence items_pakaian_seq tanpa statement cache :

Membuat Sequence items_aksesoris_seq tanpa statement cache :

Membuat Sequence orders_seq tanpa statement cache :

Melihat Hasil Sequence items_pakaian_seq tanpa statement


cache pada percobaan PERTAMA

Melihat Hasil Sequence items_pakaian_seq tanpa statement


cache pada percobaan KEDUA

Melihat Hasil Sequence items_pakaian_seq tanpa statement


cache pada percobaan KETIGA

Melihat Hasil Sequence items_aksesoris_seq tanpa statement


cache pada percobaan PERTAMA

Melihat Hasil Sequence items_aksesoris_seq tanpa statement


cache pada percobaan KEDUA

Melihat Hasil Sequence items_aksesoris_seq tanpa statement


cache pada percobaan KETIGA

Melihat Hasil Sequence orders_seq tanpa statement cache pada


percobaan PERTAMA

Melihat Hasil Sequence orders_seq tanpa statement cache pada


percobaan KEDUA

Melihat Hasil Sequence orders_seq tanpa statement cache pada


percobaan KETIGA

Penjelasan :
Penjelasan yang sama dengan Contoh sebelumnya, berdasarkan
hasil percobaan diatas, untuk penyederhanaan dapat juga dibuat
sequence tanpa menyatakan nilai maksimum. Apabila tidak ingin disimpan
dalam cache dapat juga dibuat, yaitu dengan menghilangkan cache pada
saat membuat sequences.
Setelah dilakukan pembuatan sequence, selanjutnya akan dilihat
hasilnya dengan mengetikkan query select (sudah dijelaskan pada dasar
teori) untuk items_pakaian_seq, items_aksesoris_seq, dan orders_seq.
Ketika diklik Run untuk pertama kalinya tabel nextval akan menampilkan
nilai 1. setelah itu dilakukan percobaan klik Run untuk kedua kalinya dan
tabel nextval akan menampilkan nilai 2, dan seterusnya. Maka didapat
kesimpulan bahwa nilai yang terdapat dalam tabel nextval akan selalu

naik nilainya tergantung berapa kali user meng-klik Run untuk query
select tersebut.

B. Trigger
Sebelum menuju contoh kasus penerapan trigger, buat terlebih dahulu
tabel-tabel berikut ini :
CREATE TABLE items
( item_id varchar2(5),
item_name varchar2(50),
item_type varchar2(20),
quantity number(4),
cost_per_item number(6),
constraint item_pk primary key (item_id)
);

CREATE TABLE orders


( order_id number(5),
item_id varchar2(5),
quantity number(4),
total_cost number(8),
constraint orders_pk primary key (order_id),
constraint orders_item_fk foreign key (item_id) references items (item_id)
);

CREATE TABLE orders_audit


( order_id number(5),
item_id varchar2(5),
quantity number(4),
total_cost number(8),
delete_date date,
deleted_by varchar2(20)
);

1) Contoh Kasus 1
Yang akan dibuat adalah trigger before insert yaitu pada kolom
item, sehingga setiap jenis item yang berbeda akan memiliki kode yang
berbeda disesuaikan dengan tipe itemnya. Selain memiliki kode, setiap
item_id juga akan memiliki no yang unik yang diperoleh nilainya dari
sequence yang telah dibuat di atas.

create or replace TRIGGER items_before_insert


BEFORE INSERT
ON items
FOR EACH ROW
DECLARE
v_seq varchar2(5);
BEGIN
--jika data yang diinsertkan memiliki tipe data=pakaian,
--maka format item id dengan 5 digit diawali huruf P
IF (:new.item_type='pakaian') THEN
--cara pertama
--maka format item_id
SELECT to_char(items_pakaian_seq.nextval,'0009') INTO v_seq FRO
M dual;
:new.item_id := 'P' || trim(v_seq);
--jika data yang diinsertkan memiliki tipe data=aksesoris
--maka format item id dengan 5 digit diawali huruf A
ELSIF (:new.item_type='aksesoris') THEN
--cara kedua (sama dengan cara pertama)
SELECT 'A' || trim(to_char(items_aksesoris_seq.nextval,'0009'))
INTO :new.item_id FROM dual;
END IF;
END;

Masukkan data berikut ini:


1. Insert into items (item_name, item_type, quantity, cost_per_item)
values (kemeja seragam SD, pakaian,30,40000);
2. Insert into items (item_name, item_type, quantity, cost_per_item)
values (ikat pinggang, aksesoris,30,40000);

Kemudian lihat hasil dari data yang sudah diinputkan.

2) Contoh Kasus 2
Yang akan kita buat adalah trigger after delete, yaitu setiap kali
setelah menghapus data dalam table order maka akan memasukkan data
dalam table orders_audit.
create or replace TRIGGER orders_after_delete
AFTER DELETE
ON orders
FOR EACH ROW

DECLARE
v_username varchar2(10);

BEGIN

-- Find username of person performing the DELETE on the table


SELECT user INTO v_username
FROM dual;

-- Insert record into audit table


INSERT INTO orders_audit
( order_id,
quantity,
total_cost,
delete_date,
deleted_by)
VALUES
( :old.order_id,
:old.quantity,
:old.total_cost,
sysdate,
v_username );

END;

Masukkan data dalam tabel orders, kemudian coba hapus data tersebut
per row. Retrieve data pada tabel orders_audit, bagaimana hasilnya?

Pemasukan data PERTAMA dalam tabel orders :

Pemasukan data KEDUA dalam tabel orders :

Pemasukan data KETIGA dalam tabel orders :

Penghapusan data PERTAMA dalam tabel orders :

Penghapusan data KEDUA dalam tabel orders :

Penghapusan data KETIGA dalam tabel orders :

Retrieve data pada tabel orders_audit :

Hasilnya adalah semua record penghapusan data dari tabel orders, dan
semua record penghapusan tersebut disimpan dalam tabel orders_audit.

3) LATIHAN
a. Buatlah trigger dimana setiap kali user mengganti tipe data pada item,
maka id_item juga akan berubah.
b. Buatlah trigger dimana setiap kali memasukkan data pada tabel
orders, maka total cost akan dihitung berdasarkan quantity*cost per
item (dari tabel items)

a. Lanjutan dari contoh kasus 1, data items sudah didapatkan seperti ini :

Selanjutnya, membuat sequence baru bernama items_baju_seq :

Lalu, membuat juga sequence baru bernama items_perlengkapan_seq


:

Setelah itu, baru dibuat trigger before update :

Selanjutnya, update data dalam tabel items dengan menetapkan data


kolom

ITEM_TYPE

baju

dengan

ketentuan

data

kolom

ITEM_NAME = kemeja seragam SD. Jika berhasil mengupdate data,


maka akan terdapat kalimat 1 row(s) updated. Berikut ini cara
mengupdate data pada tabel items :

Begitu juga update data dalam tabel items dengan menetapkan data
kolom ITEM_TYPE = perlengkapan dengan ketentuan data kolom
ITEM_NAME = ikat pinggang. Jika berhasil mengupdate data, maka
akan terdapat kalimat 1 row(s) updated. Berikut ini cara mengupdate
data pada tabel items :

Selanjutnya,

akan

dilihat

hasilnya

pada

tabel

items

dengan

menggunakan command sebagai berikut :

Pada gambar diatas, terlihat bahwa hasilnya adalah setiap kali user
mengganti data pada ITEM_TYPE, maka ID_ITEM juga akan berubah
berdasarkan dengan trigger yang sudah diketikkan sebelumnya.

b. Lanjutan dari contoh kasus 2, data pada tabel items & orders seperti
ini :

Pada tabel items terdapat data sebagai berikut


ITEM_ID ITEM_NAME
B0001

kemeja

ITEM_TYPE

QUANTITY COST_PER_ITEM

baju

30

40000

perlengkapan

30

40000

seragam SD
P001

ikat
pinggang

Selanjutnya, membuat sequence baru bernama orders_30_seq :

Dan membuat sequence baru bernama orders_40_seq :

Lalu, buat trigger orders_before_insert sebagai berikut :

Lalu, ubah tipe data kolom ORDER_ID pada tabel orders menjadi
varchar2 dengan size data 5 :

Ubah juga tipe data kolom QUANTITY pada tabel orders menjadi
varchar2 dengan size data 5 :

Ubah juga tipe data kolom TOTAL_COST pada tabel orders menjadi
varchar2 dengan size data 5 :

Selanjutnya, masukkan data dalam tabel orders pada kolom data


ORDER_ID, ITEM_ID, dan QUANTITY dengan nilai data 1, B0001,
dan 30. Data nilai 1 tersebut menunjukkan pada data kolom
ORDER_ID, data nilai B0001 tersebut menunjukan pada data kolom
ITEM_ID yang juga menyesuaikan pada tabel items, dan data nilai 30
tersebut menunjukkan pada data kolom QUANTITY yang juga
menyesuaikan pada tabel items. Jika berhasil memasukkan data,
maka akan terdapat kalimat 1 row(s) inserted. Berikut ini cara
memasukkan data pada tabel orders :

Selanjutnya, masukkan data lagi dalam tabel orders pada kolom data
ORDER_ID, ITEM_ID, dan QUANTITY dengan nilai data 2, P0001,
dan 30. Data nilai 2 tersebut menunjukkan pada data kolom
ORDER_ID, data nilai P0001 tersebut menunjukan pada data kolom
ITEM_ID yang juga menyesuaikan pada tabel items, dan data nilai 30
tersebut menunjukkan pada data kolom QUANTITY yang juga
menyesuaikan pada tabel items. Jika berhasil memasukkan data,
maka akan terdapat kalimat 1 row(s) inserted. Berikut ini cara
memasukkan data pada tabel orders :

Selanjutnya,

akan

dilihat

hasilnya

pada

tabel

items

dengan

menggunakan command sebagai berikut :

Pada gambar diatas, terlihat bahwa hasilnya adalah setiap kali


memasukkan data pada tabel orders, maka total cost akan dihitung
berdasarkan quantity*cost per item (dari tabel items), berdasarkan
dengan trigger yang sudah diketikkan sebelumnya.
Contoh :
Pada tabel items
ITEM_ID ITEM_NAME
B0001

ITEM_TYPE

kemeja

QUANTITY COST_PER_ITEM

baju

30

40000

perlengkapan

30

40000

seragam SD
P001

ikat
pinggang

Karena

pada

tabel

orders

untuk

QUANTITY*COST_PER_ITEM, maka :
TOTAL_COST = 30*40000
TOTAL_COST = 1200000

kolom

TOTAL_COST

TOTAL_COST = 1200000 tersebut berlaku untuk kedua items diatas,


karena quantity & cost_per_item nilainya sama.

BAB 3 PENUTUP

3.1

KESIMPULAN
Dari pembahasan diatas dapat simpulkan bahwa Sequence merupakan
objek database yang digunakan untuk membangkitkan serangkaian nilai serial
yang unik agar dapat dimanfaatkan untuk primary key dalam sebuah tabel.
Trigger merupakan object di Oracle yang digunakan untuk menjalankan fungsi
tertentu ketika kondisi yang menjadi pemicu terjadi. Beberapa jenis Trigger yaitu
After Delete Trigger, After Insert Trigger, After Update Trigger, Before Delete
Trigger, Before Insert Trigger, Before Update Trigger.

3.2

DAFTAR PUSTAKA
LABWORK 7 : SEQUENCES & TRIGGER