Anda di halaman 1dari 299

Politeknik Telkom Praktikum Sistem Manajemen Basis Data

HALAMAN PERTAMA

i
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

HALAMAN PENGARANG DAN COPYRIGHT

ii
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

KATA PENGANTAR

Segala puji bagi Allah SWT, yang telah melimpahkan


nikmat-Nya kepada penulis sehingga dapat menyelesaikan
penulisan course ware ini. Course ware ini digunakan oleh
penulis sebagai acuan untuk mata kuliah Praktikum Sistem
Manajemen Basisdata di Politeknik Telkom. Course ware ini
ditujukan bagi mahasiswa program studi diploma.
Course ware ini terdiri dari enam bab, yaitu
Pengenalan Database, Instalasi Oracle, Pengenalan PL-SQL
dan tipe data, Index view sequence, Cursor, Error Handling,
Function Procedure, Trigger, Simple Report, User Privileges,
Backup Recovery, Deadlock Handling, dan Tuning. Semua
materi tersebut merupakan bahan kuliah yang sesuai dengan
kurikulum yang berlaku di Politeknik Telkom.
Pada kesempatan ini, penulis menyampaikan terima
kasih yang tulus kepada berbagai pihak atas segala bantuan
dan dukungannya sehingga penulis dapat menyelesaikan
penulisan course ware ini. Akhirnya, penulis mohon maaf jika
dalam tulisan ini masih banyak kekurangan. Sumbangan ide,
saran, dan kritik yang membangun untuk perbaikan diktat ini
sangat penulis harapkan.

Bandung, Januari 2008

iii
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Penulis,

DAFTAR ISI

iv
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1 PENGANTAR DASAR DATABASE

Overview

Dalam kehidupan sehari-hari kita sering membahas mengenai


data dan informasi. Informasi berasal dari kumpulan data
yang disimpan secara terstruktur pada sebuah sistem yang
dikenal dengan basis data (database). Pada bab awal ini akan
dibahas tentang definisi, komponen sistem basis data, sistem
file, abstraksi data, bahasa basis data, database administrator
dan struktur sistem.

Tujuan

1. Mahasiswa mengetahui dan mengerti konsep basis data.


2. Mahasiswa mengetahui mengenai komponen-komponen
sistem basis data.
3. Mahasiswa mengetahui mengenai abstraksi data dan

Pengantar Dasar Database 1


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Database Language.

Definisi

Basis data adalah penyimpanan kumpulan informasi


secara sistematik dalam sebuah komputer sehingga dapat
diperiksa menggunakan suatu program komputer untuk
memperoleh informasi dari basis data tersebut. Perangkat
lunak yang digunakan untuk mengelola dan memanggil kueri
(query) basis data disebut sistem manajemen basis data
(database management system, DBMS). Sedangkan sistem
adalah sebuah tatanan yang terdiri atas sejumlah komponen
fungsional yang saling berhubungan dan secara bersama-
sama bertujuan untuk memenuhi suatu proses pekerjaan.
Sehingga bisa dikatakan bahwa sistem basis data adalah
sistem yang terdiri atas kumpulan file-file yang saling
berhubungan dan sekumpulan program (DBMS) yang
memungkinkan beberapa pemakai dan atau program lain
untuk mengakses dan memanipulasi data tersebut.

Komponen Sistem Basis Data

Komponen-komponen pada sebuah sistem basis data


antara lain:
 Perangkat keras
 Sistem operasi
 Basis data
 DBMS (Database Management System)
 Pemakai
 Aplikasi lain

Pengantar Dasar Database 2


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sistem Basis Data dan Sistem File

Pada sebuah institusi, data merupakan salah satu hal


yang sangat penting. Setiap bagian/divisi dari institusi
memiliki data sendiri-sendiri. Tapi setiap bagian pun
membutuhkan sebagian data dari bagian yang lain. Hal ini
yang biasa dikenal sebagai “shared data”. Setiap divisi
memiliki aplikasi sendiri-sendiri dalam melakukan manipulasi
dan pengambilan data tersebut. Setiap aplikasi memiliki file-
file dalam sistem operasi yang digunakan untuk menyimpan
data-data. Seiring dengan berkembangnya institusi,
bertambahnya bagian/divisi, bertambah pula data dan
aplikasi yang digunakan. Bertambahnya aplikasi, bertambah
pula file-file yang dibuat.
Gaya sistem pemrosesan-file tersebut menyebabkan
setiap data disimpan dalam bentuk record dalam berbagai
macam file, dan diperlukan aplikasi yang berbeda dalam
melakukan pengambilan record dari, dan penambahan record
ke dalam file. Hal ini berlaku pada masa sebelum adanya
Sistem Basis Data (DBMS).
Menyimpan data dalam bentuk file yang berbeda-beda,
memiliki kekurangan-kekurangan:
 Data redundancy dan inconsistency.
Dikarenakan programer yang berbeda membuat file dan
aplikasi masing-masing, menyebabkan beragam format
dan aplikasi yang dibuat. Bahkan, aplikasi pun dibuat
menggunakan bahasa pemrograman yang berbeda-
beda. Lebih jauh lagi, data atau informasi yang sama
bisa terdapat dalam beberapa file yang berbeda. Ini
yang disebut dengan redundancy. Redundancy data ini
lama kelamaan akan menyebabkan inconsystency dari
data.
 Kesulitan dalam pengaksesan data.
Dikarenakan setiap aplikasi memiliki file tersendiri untuk
penyimpanan dan pengambilan data, maka jika suatu
bagian dari institusi membutuhkan data dari bagian lain,
akan menemui kesulitan. Hal ini dikarenakan aplikasi
yang dimiliki bagian tersebut, tidak dapat membaca file
yang terdapat di bagian lain.
Pengantar Dasar Database 3
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Isolasi data.
Dikarenakan data tersebar dalam berbagai macam file,
dan file tersebut dalam beragam format, pembuatan
aplikasi baru akan terasa sulit ketika harus membaca
format dari masing-masing file tersebut.
 Masalah integritas.
Data yang disimpan harus memenuhi hal yang
dinamakan dengan consistency constraint. Jika sebuah
constraint berubah, maka seluruh aplikasi yang
digunakan harus mengakomodasinya. Masalah akan
muncul, jika constraint melibatkan beberapa data dari
file yang berbeda-beda.
 Masalah keamanan.
Tidak semua pengguna dari basis data dapat mengakses
semua data. Hal ini akan sulit dilakukan jika
menggunakan gaya penyimpanan data dalam file.

Abstraksi Data

Tujuan utama dari sistem basis data adalah untuk


menyediakan fasilitas untuk view data secara abstrak bagi
penggunanya. Namun bagaimana sistem menyimpan dan
mengelola data tersebut, hanya diketahui oleh sistem itu
sendiri. Abstraksi data merupakan level dalam bagaimana
melihat data dalam sebuah sistem basis data. Berikut ini tiga
level abstraksi data:

1. Level fisik
Merupakan level terendah pada abstraksi data yang
menunjukkan bagaimana sesungguhnya data disimpan.
Pada level ini pemakai melihat data sebagai gabungan
dari struktur dan datanya sendiri.
2. Level lojik
Merupakan level berikutnya pada abstraksi data,
menggambarkan data apa yang disimpan pada basis
data dan hubungan apa saja yang ada di antara data
tersebut.
3. Level view
Pengantar Dasar Database 4
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Merupakan level tertinggi dari abstraksi data yang hanya


menunjukkan sebagian dari basis data. Banyak user
dalam sistem basis data tidak akan terlibat dengan
semua data atau informasi yang ada atau yang
disimpan. Para user umumnya hanya membutuhkan
sebagian data atau informasi dalam basis data yang
kemunculannya di mata user diatur oleh aplikasi end
user.

Database Administrator

Salah satu alasan dari pemanfaatan DBMS adalah untuk


mendapatkan kontrol yang terpusat atas data dan program
yang mengakses data tersebut. Orang yang memiliki kontrol
atas sistem seperti yang telah disebutkan tersebut adalah
database administrator (DBA).
Fungsi-fungsi DBA antara lain:
 Definisi skema
 Definisi struktur penyimpanan dan metode akses
 Modifikasi skema dan organisasi fisik
 Memberikan otorisasi untuk akese data
 Spesifikasi integritas constraint

Struktur Sistem

Sebuah sistem basis data terbagi ke dalam beberapa


modul yang masing-masing mempunyai tanggung jawab
dalam membentuk struktur sistem secara keseluruhan.
Beberapa fungsi dari sistem basis data mungkin telah
diberikan oleh sistem operasi. Tetapi dalam sebagian besar
kondisi, sistem operasi hanya menyediakan servis-servis
dasar dan sistem basis data harus dibangun di atasnya.

Pengantar Dasar Database 5


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Gambar PENGANTAR DASAR DATABASE-1 Struktur Sistem Basis


Data
Komponen-komponen fungsional dari sebuah sistem basis
data dibagi menjadi dua, yaitu komponen query processor
dan komponen storage manager.
Query processor terdiri atas:
 DML compiler, menerjemahkan perintah DML pada
suatu query ke dalam instruksi level rendah yang
dimengerti oleh mesin evaluasi query. Dengan kata lain,

Pengantar Dasar Database 6


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

DML compiler berusaha mengubah suatu permintaan user


menjadi bentuk yang ekivalen namun lebih efisien
sekaligus juga menentukan sebuah strategi yang tepat
untuk mengeksekusi query tersebut.

 Embedded DML precompiler, mengkonversi


perintah DML yang embed pada sebuah program aplikasi
ke procedure call yang normal dalam bahasa host.
Precompiler ini harus nerinteraksi dengan DML compiler
untuk menghasilkjan kode yang sesuai.

 DDL interpreter, menginterpretasikan perintah DDL


dan mencatatnya dalam sekumpulan tabel yang
mengandung metadata.

 Query evaluation engine, mengeksekusi instruksi


level rendah yang dihasilkan oleh DML compiler.

Komponen storage manager menyediakan antarmuka antara


data level rendah yang tersimpan dalam basis data dan
program aplikasi serta query yang diberikan ke sistem. Yang
termasuk komponen ini adalah:

 Manajer otorisasi dan integritas, menguji


integritas dari constraint yang ada serta otoritas user
untuk mengakses data.
 Manajer transaksi, meyakinkan basis data tetap
pada kondisi konsisten (benar) saat terjadi kegagalan
sistem serta meyakinkan bahawa eksekusi dari transaksi
yang konkuren (terjadi “bersamaan”) berlangsung tanpa
adanya konflik.
 Manajer file, mengelola alokasi ruang pada disk
penyimpanan struktur data yang digunakan untuk
mewakili informasi yang disimpan pada disk.
 Manajer buffer, bertanggung jawab untuk mengambil
data dari disk penyimpanan ke dalam memori utama serta
menetukan data yang mana yang akan ditempatkan di
memory

Pengantar Dasar Database 7


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Bahasa Basis Data

Sebuah sistem basis data menyediakan dua macam


bahasa yang berbeda. Pertama untuk menspesifikasikan
skema basis data (DDL) dan yang kedua untuk melakukan
perubahan dalam basis data (DML). Selain itu juga ada select
statement (query) yang digunakan untuk mengambil data
yang ada di dalam database.

Data Definition Language (DDL)


Data Definition Language ini Berfungsi untuk
mendefinisikan struktrur sebuah tabel, tipe data setiap field
dan constraint yang berlaku pada data yang tersimpan di
dalam sebuah tabel. Hasil dari kompilasi DDL adalah
kumpulan tabel yang tersimpan pada sebuah file khusus yang
disebut dengan kamus data (data dictionary) atau data
directory.
Kamus data merupakan sebuah file yang berupa
metadata, yaitu data tentang data. Kamus data ini akan selalu
diakses pada suatu operasi basis data sebelum suatu file data
yang sesungguhnya diakses.
DDL terdiri dari CREATE, ALTER, dan DROP yang akan
dijelaskan sebagai berikut :

 Membuat tabel (CREATE TABLE)

Query untuk membuat tabel (create table) adalah :


CREATE TABLE nama_tabel
( nama_field_1 tipe_data,
nama_field_2 tipe_data,
………,
[ CONSTRAINT nama_constraint PRIMARY KEY
(nama_field)
]

Pengantar Dasar Database 8


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

[ CONSTRAINT nama_constraint FOREIGN KEY


(nama_field) REFERENCE nama_table (nama_field)
ON DELETE CASCADE
]
);

Keterangan :
nama_field1, nama_field2 adalah nama kolom (field) yang
akan ada di dalam tabel.
tipe_data adalah tipe data yang bisa ditampung oleh field.
tipe_constraint adalah batasan yang menentukan suatu
field.
Tanda [ ] menyatakan bahwa yang didalamnya boleh ada
atau tidak.

Macam – macam tipe constraint yang mungkin adalah :


 NULL atau NOT NULL
Constraint NOT NULL ini berfungsi untuk menjamin field
harus diisi sedangkan constraint NULL memperbolehkan
suatu field untuk dikosongi
 UNIQUE
Constraint ini berfungsi untuk menjamin bahwa nilai
pada setiap record di dalam sebuah tabel adalah unik
 PRIMARY KEY
 FOREIGN KEY
 CHECK
Constraint ini berfungsi untuk menjamin bahwa nilai
yang akan dimasukkan ke dalam sebuah field sudah
sesuai dengan aturan yang dibuat

Contoh : pembuatan tabel mahasiswa dengan atribut nim


bertipe char(9) dan nama bertipe varchar(20) yang tidak
boleh kosong.

Sintaks : CREATE TABLE mahasiswa

Pengantar Dasar Database 9


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

(
Nim char(9),
Nama varchar(20) not null,
CONSTRAINT pk_mhs PRIMARY KEY (Nim)
);

 Memanipulasi tabel (ALTER TABLE)


Sebuah struktur tabel yang sudah didefinisikan dapat
dimodifikasi dengan menggunakan perintah ALTER
TABLE.
Ada beberapa jenis modifikasi pada tabel :

1. Menambahkan constraint baru untuk sebuah tabel


Query :
ALTER TABLE nama_tabel
ADD CONSTRAINT nama_constraint_baru
(definisi_constraint);

Contoh : (misal pada tabel mahasiswa belum ada


primary key)
SQL > ALTER TABLE mahasiswa
ADD CONSTRAINT pk_mhs PRIMARY KEY
(Nim);

2. Menghapus sebuah constraint di dalam tabel.


Query :
ALTER TABLE nama_tabel
DROP CONSTRAINT nama_constraint;

Contoh :
SQL > ALTER TABLE mahasiswa
DROP CONSTRAINT pk_ mhs;

3. Manambahkan field baru pada sebuah tabel.


Query :
ALTER TABLE nama_tabel
ADD(nama_field tipe_data
[definisi_konstraint]);

Pengantar Dasar Database 10


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Contoh :
SQL > ALTER TABLE mahasiswa
ADD(alamat varchar(50) NOT NULL);

4. Mengubah definisi field yang telah ada pada sebuah


tabel.
Query :
ALTER TABLE nama_tabel
MODIFY(nama_field tipe_field
definisi_konstraint);

Contoh :
SQL > ALTER TABLE mahasiswa
MODIFY(alamat varchar(25) not null);

 Menghapus tabel (DROP TABLE)


Query untuk menghapus tabel (drop table) adalah :

DROP TABLE nama_table [CASCADE CONSTRAINT];

CASCADE CONSTRAINT :
akan menghapus semua constraint yang terhubung
dengan tabel yang dihapus.
Contoh :
SQL > DROP TABLE buku;

Data Manipulation Language (DML)


Level abstraksi yang telah dibahas sebelumnya tidak
hanya berlaku pada definisi atau struktur data tetapi juga
pada manipulasi data. Manipulasi data itu sendiri dapat
berupa:
 Pemasukan informasi baru ke dalam basis data (insert)
 Penghapusan informasi dari basis data (delete)
 Modifikasi informasi yang tersimpan pada basis data
(update)

DML merupakan bahasa yang memungkinkan user untuk


mengakses atau memanipulasi data sebagaimana telah

Pengantar Dasar Database 11


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

direpresentasikan oleh model data. Terdapat dua macam DML,


yaitu:
Prosedural, mengharuskan user untuk menentukan data apa
yang dibutuhkan dan bagaimana untuk mendapatkan data
tersebut.
Nonprosedural, mengharuskan pemakai untuk menentukan
data apa yang dibutuhkan tanpa menyebutkan bagaimana
mendapatkan data tersebut.
Sintaks-sintaks pada DML antara lain :
 INSERT RECORD
Insert digunakan untuk menyisipkan sebuah record ke
dalam sebuah tabel.
Query :
INSERT INTO nama_tabel [(nama_field1, nama_field2, ….)]
VALUES (nilai1, nilai2, …);

Perlu diperhatikan bahwa nama_field1, nama_field2, …


dapat dihilangkan. Hal ini dapat dilakukan bila nilai yang
dimasukkan user, urutan sesuai dengan urutan field di
dalam tabel tersebut, dan jumlah nilai yang dimasukkan
juga harus sama dengan jumlah field pada tabel. Selain
itu, proses penyisipan juga harus mematuhi aturan
constraint yang telah didefinisikan pada sebuah tabel
Contoh :
insert into mahasiswa
values('30108001', 'paijo', 'skp');
atau
insert into mahasiswa (nim,nama,alamat)
values('30108001', 'paijo', 'skp');

 UPDATE RECORD
Setiap nilai record yang telah disimpan di dalam tabel
dapat dimodifikasi kembali berdasarkan kondisi
tertentu. Jika kondisi tidak didefinisikan, maka nilai
semua record akan terupdate
Query :
UPDATE nama_tabel

Pengantar Dasar Database 12


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SET nama_field1 = nilai_baru1,


nama_field2 = nilai_baru2,
….
[WHERE kondisi];

Contoh :

SQL > update mahasiswa


set nama = 'paimin',
alamat = 'skb'
where nim = '30108001';

 DELETE RECORD
Record yang telah disimpan di dalam sebuah tabel
dapat dihapus berdasarkan kondisi tertentu. Jika
kondisi untuk menghapus tidak didefinisikan maka
seluruh record pada tabel tersebut akan dihapus.
Query :
DELETE nama_tabel [WHERE kondisi];

Contoh :
SQL > delete mahasiswa
where nim = '30108001';

(menghapus sebuah record pada tabel mahasiswa


dimana nimnya ‘30108001’)

SQL > delete mahasiswa;


(menghapus semua record pada table mahasiswa)

Pengantar Dasar Database 13


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Select Statement
Statement SELECT digunakan untuk mengambil record dari
sebuah tabel atau lebih. Record yang diambil dengan SELECT
dapat disaring dengan menggunakan kondisi yang terdefinisi.
Statement SELECT mempunyai format sebagai berikut :
SELECT [DISTINCT | ALL] * | nama_field 1, nama_field 2,
……
FROM nama_tabel
[WHERE kondisi1]
[GROUP BY nama_field] [HAVING kondisi2]
[ORDER BY nama_field [ASC | DSC]];

DISTINCT digunakan untuk mengambil record yang nilainya


tidak ganda.
FROM digunakan untuk mendefinisikan tabel yang
menjadi sumber data dari suatu perintah SELECT.
WHERE digunakan untuk mendefinisikan kondisi
pengambilan data pada tabel yang disebutkan di klausa
FROM.
GROUP BY digunakan untuk mengelompokkan baris – baris
data berdasarkan ekspresi group – group tertentu yaitu untuk
field tertentu.
HAVING digunakan untuk memilih / mendefinisikan kriteria
kelompok group yang akan ditampilkan berdasarkan group
yang akan dibuat. Penggunaa klausa HAVING dipakai sebagai
pengganti klausa WHERE pada GROUP BY.
ORDER BY digunakan untuk mengurutkan seleksi
berdasarkan kondisi yang diinginkan.
ASC (ascending) berarti pengurutan menaik – 1, 2, 3, 4 ….
DSC (descending) berarti pengurutan menurun – 10, 7, 4, 2,
….

Untuk mengambil semua field pada setiap record, maka ganti


semua nama field menjadi tanda bintang ‘*’ (tanpa tanda
kutip)
SELECT *
Pengantar Dasar Database 14
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

FROM nama_tabel
[WHERE kondisi];

Contoh : SELECT * FROM mahasiswa;

Untuk mengambil record yang memenuhi kondisi tertentu


maka statement SELECT digabung dengan klausa WHERE.
Format WHERE :

WHERE nama_field operator_kondisional nilai

Operator kondisional yang diganakan adalah :


Operator Arti
= Sama dengan
<>, !=, ^= Tidak sama dengan
> Lebih besar
< Lebih kecil
>= Lebih besar atau sama dengan
<= Lebih kecil atau sama dengan
BETWEEN … AND … Mengambil nilai yang berada pada
antara 2 buah bilangan.
IN Mengetes nilai – nilai pada list yang
disepsifikasikan
LIKE Menyocokkan sebuah pola karekter
IS NULL Apakah sebuah nilai null?

Untuk menggabungkan beberapa kondisi didalam klausa


WHERE, maka digunakan operator boolean AND, OR, dan
NOT.
AND : apabila setiap kondisi harus dipenuhi.
OR : apabila cukup salah satu kondisi yang terpenuhi.
NOT : apabila merupakan kebalikan / negasi dari kondisi
yang dipenuhi.

Contoh :
Select * from mahasiswa where nama not ‘paimen’;

BETWEEN … AND …

Pengantar Dasar Database 15


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Untuk mengambil record dengan nilai field berada pada batas


tertentu, maka digunakan statement BETWEEN atau NOT
BETWEEN.
Statement ini bergabung menjadi satu dengan klausa WHERE.
WHERE nama_field BETWEEN nilai_awal AND nilai_akhir

WHERE nama_field NOT BETWEEN nilai_awal AND nilai_akhir

IN dan NOT IN
Untuk menampilkan record yang nilai fieldnya berada pada
suatu kelompok nilai tertentu maka gunakan statement : IN
atau NOT IN yang dipakai bersama klausa WHERE
WHERE nama_field IN (nilai1, nilai2, nilai3, …)

WHERE nama_field NOT IN (nilai1, nilai2, nilai3, …)

LIKE dan NOT LIKE


WHERE nama_field LIKE pola;

WHERE nama_field NOT LIKE pola;

Untuk menampilkan record yang nilai fieldnya mengandung


nilai tertentu, digunakan statement LIKE atau NOT LIKE yang
diletakkan pada klausa WHERE.

Pola adalah karekter atau string, yang dapat dipadukan


dengan dua macam wild character, yaitu :
% : mewakili 0,1 atau beberapa karakter
_ : mewakili tempat sebuah karakter.
Contoh :
1. %JO%
String yang sesuai dengan %JO% adalah : JOHAN, IJO, PAIJO,
JOJON
2. _ELO_
Pengantar Dasar Database 16
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

String yang sesuai dengan _ELO_ adalah : BELOK, KELOK,


BELON

Field yang dapat menggunakan statement LIKE atau NOT LIKE


adalah field yang bertipe Char, Varchar, atau Varchar2.

IS NULL dan IS NOT NULL


WHERE nama_field IS NULL;

WHERE nama_field IS NOT NULL;

Salah satu kegunaan nilai NULL adalah untuk


merepresentasikan sebuah nilai yang belum ada. Dalam hal
ini nilai field untuk sebuah record belum terisi. Sebuah nilai
NULL tidak idektik dengan spasi atau 0.
Untuk menampilkan record yang mempunyai nilai field NULL
atau tidak, gunakan statement IS NULL atau IS NOT NULL
yang dimasukkan dalam statement WHERE

OPERATOR ARITMATIKA
Ada kemungkinan, pada saat menampilkan nilai, kita ingin
memodifikasi nilai yang ingin ditampilkan, misalnya kita ingin
menampilkan harga barang, namun harga barang tersebut
ditambah 500.

Untuk memodifikasi nilai tersebut kita gunakan operator


aritmatika yang diletakkan pada klausa SELECT.
SELECT nama_field1 operator nilai_tambahan, …
FROM nama_tabel
[WHERE kondisi];

Operator yang digunakan adalah : *, /, +, dan –


Field yang bisa menggunakan operator ini harus
bertipe numerik, date?
Contoh :
SQL > SELECT nim, spp + 50000
FROM keuangan;

Pengantar Dasar Database 17


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

JURNAL Studi Kasus Toko Buku

Pengantar Dasar Database 18


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1. Berdasarkan ER Diagram diatas buatlah Data Definition Language (DDL)?


2. Masukkan data-data berikut ke tabel jenis !

ID JENIS KATEGORI
AG Agama
AK Akuntansi
BH Bahasa
BI Biologi
EK Ekonomi
FL Filsafat
FI Fisika
IT Komputer
dan Internet
MN Manajemen
UM Umum

3. Masukkan data-data berikut ke tabel supplier !

Pengantar Dasar Database 19


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

ID SUPPLIER NAMA NO TELEPON ALAMAT


SP-001 PT Sidogiri 022-8768509 JL Ruwet Gg Buntet No.34 Bandung
SP-002 PT Moroseneng 021-8695465 JL Badak Jawa No. 6 Jakarta
SP-003 PT Suka-suka 031-4568698 JL Darmo No.7 Surabaya
SP-004 PT Sukabaca 022-9797966 JL Sukabirus no.9 Bandung

4. Masukkan data-data berikut ini ke dalam table buku!


ID BUKU ID ID JUDUL PENGARANG HARGA STOCK
JENIS SUPPLIER
BK-001 IT SP-002 10 Langkah Belajar Logika & Ema Utami Rp27.375 10
Algoritma Meng. Bahasa C &
C++
BK-002 IT SP-001 10 Mp.Lotus Notes 4.5 Jane Calabria Rp9.180 34
BK-003 BH SP-004 Kamus Bahasa Inggris Jubilee Enterprise Rp15.980 65
BK-004 IT SP-001 101 Tip & Trik Adobe Gregorius Agung Rp16.830 26
Photoshop Cs
BK-005 BI SP-001 101 Tip & Trik Belajar Anatomi Gregorius Agung Rp19.380 84
Manusia
BK-006 IT SP-002 101 Tip & Trik Ms Access Hengky Alexander M. Rp16.830 36
Project 2003 & Sql Server 2000
BK-007 MN SP-002 Konsep-konsep Marketing Anwar Khaidir Rp12.580 26
BK-008 AG SP-004 RENUNGAN JUM'AT ABDURRAHMAN Rp31.280 6
ARROISI

Pengantar Dasar Database 20


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

BK-009 UM SP-003 11 Langkah Menjadi Sahabat V. Dwiyani Rp19.380 2


Ana
BK-010 IT SP-002 12 Kreasi Logo Dengan Adobe Jubilee Enterprise Rp27.880 88
Illustrator Cs2
BK-011 UM SP-004 13 Cara Praktis Memetik R. Herry Prasetyo Rp16.830 25
Sukses

Pengantar Dasar Database 21


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2 PENGANTAR DASAR DATABASE 2

Overview

Pengambilan data dari database dijalankan melalui sebuah


queri atau select statement. Fungsionalitas - fungsionalitas
dalam pembuatan queri ini sangat beragam dalam rangka
membentuk informasi yang sesuai dengan keinginan
developer.

Tujuan

4. Mahasiswa dapat menggunakan fungsi – fungsi untuk


queri dengan menggunakan SQL * Plus.
5. Mahasiswa dapat melakukan join terhadap beberapa
tabel.
6. Mahasiswa dapat membuat query bersarang dengan
menggunakan SQL *Plus.

Pengantar Dasar Database 2 22


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Fungsi-fungsi pada SQL


DUAL
DUAL adalah sebuah built-in tabel yang disediakan oleh
Oracle untuk memproses ekspresi aritmatika, logika,
tanggal dan lain sebagainya.

Contoh :
SQL > SELECT 10 * 12 – 2 FROM DUAL;
Menampilkan hasil operasi aritmatika 10 * 12 – 2

SQL > SELECT sysdate FROM DUAL;


Menampilkan tanggal hari ini

GROUP BY … HAVING ….
GROUP BY …. HAVING … digunakan untuk menyeleksi
himpunan yang dihitung berdasarkan sebuah fungsi
agregasi (agregate function) sesuai dengan kondisi yang
didefinisikan setelah HAVING.

SELECT fungsi_agregasi, ..
FROM nama_tabel
GROUP BY nama_field
[HAVING kondisi];
Aggregate Function
AVG (Average / rata - rata)
AVG berfungsi untuk mengembalikan nilai rata – rata
dari sekumpulan nilai yang terdapat pada sekumpulan
nilai record pada sebuah field.
Contoh :

SQL > SELECT AVG(donasi) Donasi FROM keuangan;

Donasi : merupakan alias dari hasil fungsi AVG(donasi)


Queri diatas digunakan untuk menampilkan donasi rata –
rata mahasiswa yang terdapat di dalam tabel keuangan.

Pengantar Dasar Database 2 23


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

MAX (Maximum)
MAX berfungsi untuk mengembalikan nilai maksimum
yang terdapat pada sekumpulan nilai pada sebuah field.
Contoh :

SQL > SELECT MAX(donasi) “Donasi Terbesar”


FROM keuangan;

Donasi Terbesar : merupakan alias dari hasil fungsi


MAX(donasi)
Queri diatas digunakan untuk menampilkan nilai donasi
yang paling besar di dalam tabel keuangan.

MIN (Minimum)
MIN berfungsi untuk mengambil nilai minimum yang
terdapat pada sekumpulan nilai pada sebuah field.
Contoh :

SQL > SELECT MIN(donasi) “Donasi Terkecil”


FROM keuangan;

Donasi Terkecil : merupakan alias dari hasil


fungsi MIN(donasi)
Queri diatas digunakan untuk menampilkan nilai donasi
yang paling kecil di dalam tabel keuangan.

SUM (jumlah / sigma)


SUM berfungsi untuk menghitung jumlah total nilai pada
sebuah kolom tertentu.
Contoh :

SQL > SELECT SUM(donasi) “Total donasi” FROM


keuangan;

Queri diatas digunakan untuk menampilkan total jumlah


donasi untuk seluruh mahasiswa pada tabel keuangan.

Pengantar Dasar Database 2 24


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

COUNT (banyak record)


COUNT berfungsi untuk menghitung jumlah record yang
memenuhi kondisi tertentu.
Contoh :

SQL > SELECT COUNT(*) “Donasi Manajemen


Informatika”
FROM keuangan
WHERE nim like ‘3010%’;

Queri diatas digunakan untuk menampilkan jumlah


mahasiswa Manajemen Informatika yang memberikan
donasi.

Built-In Function Oracle

Built-In Function adalah fungsi yang disediakan oleh


Oracle agar dapat digunakan di dalam SQL *Plus
maupun oleh program eksternal.
Fungsi ini terdiri dari beberapa kelompok, yaitu :

Fungsi Aritmatika
Fungsi Kegunaan Contoh
ABS Mengembalikan ABS(-10) = 10
nilai absolute
CEIL Mengembalikan CEIL(4.2) = 5
bilangan bulat CEIL(-4.2) = -4
terbesar
EXP Mengembalikan EXP(0) = 1
nilai EXP(1) = 2.718
pemangkatan
bilangan natural
(ex)
FLOOR Mengembalikan FLOOR(4.2) = 4
bilangan bulat FLOOR(-4.2) =
terkecil -5
LN Mengembalikan LN(2) =
nilai logaritma 0.693147181

Pengantar Dasar Database 2 25


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

natural
LOG Mengembalikan LOG(10,10) =1
nilai logaritma
MOD Menghasilkan MOD(4,2) = 0
sisa pembagian MOD(7,2) = 1
POWER Mengembalikan POWER(2,3) =
nilai pangkat 8
ROUND Mengembalikan ROUND(5.56,1)
bilangan = 5.6
pembulatan
SIGN Mengembalikan SIGN(-6) = -1
nilai positif, SIGN(3) = 1
negative, atau
nol. Nilai balikan
sign ada tiga
yaitu
1 jika x>0
0 jika x=0
-1 jika x<0
SIN, COS, TAN, Fungsi SIN(0) = 0
SINH, trigonometri COS(90) = 0
COSH,TANH
SQRT Mengembalikan SQRT(16) = 4
nilai akar
TRUNC Mengembalikan TRUNC(5.671,2
nilai yang telah ) = 5.67
dipotong

Fungsi Karakter / String


Fungsi Kegunaan Contoh
ASCII(karakter) Memgembalikan ASCI(‘A’) = 65
nilai ASCII dari
karakter
CHR(nilai_ASCII) Memgembalikan CHR(65) = ‘A’
karakter dari
sebuah nilai
ASCII
CONCAT(teks1, Menggabungkan CONCAT

Pengantar Dasar Database 2 26


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

teks2) teks1 dan teks2 (“sate”,


”ayam”)
= “sate ayam”
DECODE(field, Menggantikan DECODE(bulan,
kode_decode) nilai yang 1, ‘Januari’,
terdapat di 2,’Februari’,
dalam field 3,’Maret’,
dengan nilai 4,’April’,
lain. 5,’Mei’,
6,’Juni’,
‘Bulan Lain’
) bulan

GREATEST(nilai Mengembalikan GREATEST


1, nilai2, nilai3, nilai terbesar (3,10,15,4)
…) dari sederetan = 15
nilai
INITCAP(String) Mengembalikan INITCAP(‘pOLIte
string yang kNik tElkoM’)
terdiri dari huruf = Politeknik
kapital pada Telkom
setiap kata.
INSTR Mencari posisi INSTR
(teks1, teks2) teks2 yang (’SQL n
terdapat di PL/SQL’,
dalam teks1. ’SQL’) = 1
INSTR(teks1, Pencarian dapat
teks2, i) dimulai dari INSTR
posisi ke-i. (’SQL n
n menyatakan PL/SQL’,
INSTR(teks1, pengulangan ’SQL’, 4) = 10
teks2, 1, n) yang ke-n kali
dari teks2 yang INSTR
terdapat di (’SQL n
dalam teks1. PL/SQL’,
’SQL’,1,2) =
10

LEAST(nila1, Mengembalikan LEAST(2,2,5,1,

Pengantar Dasar Database 2 27


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

nilai2, nilai3,…) nilai terkecil dari 6)


sederetan nilai =1
LENGTH(String) Mengembalikan LENGTH(“1233
panjang String ”)
=4
LOWER(String) Mengubah String LOWER
menjadi huruf (“PoLTeK”)
kecil semuanya = poltek
LPAD Menyisipkan LPAD
(teks1, n , karakter teks2 (‘Oracle’, 10 ,
teks2) ke dalam teks1 ‘/’)
untuk karakter = ////Oracle
kosong
sepanjang n
disebelah kiri
teks1
LTRIM Menghapus LTRIM
(teks1, teks2) karakter- (‘xxxOracle’,’x’
karakter pada )
bagian kiri teks1 = Oracle
sehingga tidak
diawali dengan
sembarang
karakter pada
teks2.
Default teks2
adalah spasi
REPLACE Menggantikan REPLACE
(teks1, teks2, kemunculan (‘siswa’,’a’,’i’)
teks3) karakter teks2 di = siswi
dalam teks1
dengan teks3.
Bila teks3 tidak
disebutkan
maka teks2
pada teks1 akan
dihapus karena
default teks3
null

Pengantar Dasar Database 2 28


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

RPAD Menyisipkan RPAD


(teks1, n, teks2) karakter teks2 (‘Oracle’, 10 ,
ke dalam teks1 ‘/’)
untuk karakter = Oracle////
kosong
sepanjang n
disebelah kanan
teks1
RTRIM Menghapus RTRIM
(teks1, teks2) karakter- ('123000', '0')
karakter pada = 123
bagian kanan
teks1 sehingga
tidak diakhiri
dengan
sembarang
karakter pada
teks2.
Default teks2
adalah spasi
SUBSTR(Teks,i) Mengambil SUBSTR(“ABCD
SUBSTR(Teks, i, karakter pada ”, 2)
n) string teks = “BCD”
dimulai dari SUBSTR
posisi ke-i (dari (“ABCD”, -3, 2 )
kiri ke kanan) = “BC”
sebanyak n
buah. Jika i
bernilai negatif,
maka posisi ke-i
dimulai dari
kanan ke kiri
TRANSLATE Menggantikan
(teks1, teks2, kemunculan
teks3) karakter teks2 di
dalam teks1
dengan teks3.
perbedaannya
dengan

Pengantar Dasar Database 2 29


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

REPLACE adalah
karakter yang
digantikan
dilakukan secara
individual
UPER(String) Mengubah String UPER(“PoLTeK”)
menjadi huruf = POLTEK
besar semuanya

Fungsi Tanggal
Fungsi Kegunaan Contoh
ADD_MONTHS Menambah atau sysdate
(tanggal, n) mengurangi =06-JUL-05
tanggal
terhadap n ADD_MONTHS
(sysdate, 2)
= 08-JUL-05

ADD_MONTHS
(sysdate, -2)
= 04-JUL-05
LAST_DAY Menghasilkan LAST_DAY
(tanggal) tanggal terakhir (sysdate) =
pada sebuah 31-JUL-05
bulan
MONTHS_BETW Mengahsilkan MONTHS_BETW
EEN selisih tanggal2 EEN
(tanggal 2, dan tanggal1 (‘01-JUL-05’,
tanggal1) dalam satuan ‘14-MAR-05’)
bulan =
3.58064516129
032

NEXT_DAY() Mengembalikan NEXT_DAY()


tanggal = 07-JUL-05
berikutnya
TO_CHAR Mengubah TO_CHAR
(tanggal, tanggal menjadi (sysdate,

Pengantar Dasar Database 2 30


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

format) bentuk karakter ‘DD-MM-YYYY’)


sesuai dengan = 06-07-2006
format. Sehingga
dapat
ditampilkan
sebagai string

Join Tabel
JOIN adalah menggabungkan beberapa tabel dangan
cara mengakses setiap tabel secara individu
berdasarkan kondisi yang diberikan, kemudian hasilnya
digabungkan.
Syarat penggunaan JOIN adalah harus terdapat
hubungan / keterkaitan diantara tabel – tabel yang
dijadikan sumber dari kolom – kolom yang hendak di join
dan ditampilkan. Keterkaitan diatara tabel – tabel berupa
kolom – kolom yang memiliki nilai dan tipe data yang
sama.
Join dimungkinkan dikarenakan oleh model relasional,
begitu juga sebaliknya, join dibutuhkan dikarenakan
model relational. Join sebetulnya secara umum terbagi
dalam 3 jenis: cartesian product, join condition dan outer
join.
Cartessian Product
Cartessian product merupakan himpunan dari hasil
kombinasi yang memungkinkan dari baris-baris data dari
2 tabel atau lebih. Cartessian product merupakan join
tanpa menggunakan join condition. Dengan demikian,
sebuah baris pada tabel yang satu akan digabungkan
dengan semua baris pada tabel yang lain, seterusnya
sehingga jumlah baris hasil query menjadi ( n 1* n2
*...*nn ) dengan ni adalah jumlah baris pada tabel ke-i.
Jumlah baris hasil query yang merupakan hasil perkalian
dari jumlah baris dari tabel-tabel inilah yang disebut
dengan produk kartesian (cartesian product).
Contoh : Misalkan ilustrasi sebagai berikut

Pengantar Dasar Database 2 31


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Tabel A Tabel B

A1 A2
1 10
2 100 B1 B2
2 4
3 9

Jika kita melakukan operasi seperti ini:


SELECT * FROM A, B;
maka akan dihasilkan Cartesian Product.

Tabel Produk Cartesian


A1 A2 B1 B2
1 10 2 4
1 10 3 9
2 100 2 4
2 100 3 9

Untuk menghindari hal seperti ini, paling tidak terdapat


sebuah join condition pada query yang melakukan join
terhadap kedua tabel tersebut dengan catatan join
condition tersebut valid.
Join Condition
Join condition menspesifikasikan kondisi join dari
beberapa tabel. Seperti telah disinggung sebelumnya,
join biasanya selalu melibatkan kolom-kolom yang
terdapat pada tabel yang terlibat join yang memiliki
kesamaan dan keserupaan maksud representasi dari
kolom tersebut.

Pengantar Dasar Database 2 32


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Equjoin/simple join/inner join adalah join yang


menggunakan operator sama dengan (=) pada join
condition-nya.
Contoh : Misalnya jika kita melakukan operasi
SELECT * FROM A, B WHERE A.A1 = B.B1

Maka akan dihasilkan sbb:


A1 A2 B1 B2
2 100 2 4

Dari hasil operasi join tersebut dapat terlihat bahwa


hanya nilai-nilai dari field A1 pada tabel A dan nilai-nilai
field B1 pada tabel B yang bersesuaian yang
ditampilkan. Dalam skenario ini adalah A1=B1=2.

Non-Equjoin adalah sebuah join yang menggunakan


join condition yang berisi operator selain sama dengan
(=) misalnya operator BETWEEN...AND
Self Join adalah query yang menggabungkan sebuah
tabel dengan dirinya sendiri. Tabel tersebut muncul dua
kali pada klausa from dan masing-masing harus diikuti
dengan nama aliasnya. Penggunaan tabel alias ini wajib
dilakukan untuk menghindari ambiguous karena semua
nama kolom pada tabel pertama ada juga pada tabel
kedua.
Contoh:
Misalkan terdapat tabel C sebagai berikut
Tabel C
C1 C2 C3 C4
1 10 2 4
1 10 3 9
2 100 2 4
2 100 3 9
Jika dilakukan perintah:

Pengantar Dasar Database 2 33


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SELECT a.C1,a.C2,a.C3,a.C4 FROM C a, C b WHERE


a.C1=b.C3
Dari skenario ini dapat dibayangkan kita memiliki dua
buah tabel yang identik yaitu tabel alias a dan tabel
alias b. Dimana operasi yang dilakukan dapat
digambarkan sebagai berikut:
Tabel C
C1 C2 C3 C4
1 10 2 4
1 10 3 9
2 100 2 4
2 100 3 9

Tabel Alias a Tabel Alias b

C1 C2 C3 C4 C1 C2 C3 C4
1 10 2 4
1 10 2 4
1 10 3 9 1 10 3 9

2 100 2 4 2 100 2 4

2 100 3 9 2 100 3 9

Maka akan dihasilkan seperti ini


C1 C2 C3 C4
2 100 2 4
2 100 3 9
2 100 2 4
2 100 3 9

Pengantar Dasar Database 2 34


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Outer Join
Outer join biasanya digunakan ketika kita ingin baris
data dari tabel yang pertama, atau dari tabel yang
kedua atau dari keduanya tetap ditampilkan meskipun
tidak terdapat pasangan baris data tersebut dari tabel
lain pada kondisi join-nya. Misalkan tabel A di-join
dengan tabel B. Semua baris data pada tabel A ingin
ditampilkan walaupun tidak memenuhi join condition.
Untuk itu, operator outer join (+) pada join condition
harus disertakan setelah kolom-kolom tabel B. Penulisan
operator join dapat ditulis sebagai berikut.
A.col_name = B.col_name(+)
Dalam hal ini, tabel B akan memberikan nilai NULL untuk
setiap baris pada tabel A jika join condition tidak
terpenuhi.

Contoh :
Misalnya jika kita melakukan operasi SELECT * FROM A,
B WHERE A.A1 = B.B1(+) maka akan dihasilkan
A1 A2 B1 B2
1 10 NULL NULL
2 100 2 4

Pada outer join ada beberapa aturan yang perlu


diperhatikan :
 Operator “+” hanya boleh ada pada klausa
WHERE dan hanya dapat dikenakan pada kolom dari
tabel atau view.
 Jika terdapat lebih dari satu join condition,
operator “+” harus dikenakan pada semua join
condition tersebut. Jika tidak, hasilnya dengan inner join.
 Jika ada kondisi yang mengandung kolom tabel B
dan kolom tersebut dibandingkan dengan sebuah nilai
konstan, operator “+” harus dikenakan pada kolom
tersebut. Misalkan:

Pengantar Dasar Database 2 35


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SELECT * FROM A, B WHERE A.A1 = B.B1(+) and


B.B1(+) > 0;
 Kondisi yang mengandung operator “+” tidak
boleh dikombinasikan dengan logika OR dan IN.
 Kolom dengan operator “+” tidak boleh
dibandingkan dengan hasil subquery. Misalkan:
SELECT * FROM A, B WHERE A.A1 = B.B1(+) and
B.B1(+) > (SELECT C4 FROM C WHERE C4=2);
 Untuk query yang menggunakan outer join dan
melibatkan lebih dari dua tabel, misalnya tabel A, B, dan
C, maka tabel yang satu hanya dapat men-generate
tabel NULL untuk satu tabel. Dengan demikian, operator
“+” tidak dapat dikenakan pada kolom tabel B untuk dua
buah join condition: A join B dan C join B. Misalkan:
SELECT * FROM A, B WHERE A.A1 = B.B1(+) and
C.C1=B.B1(+) ;

Kesimpulan: Operasi join digunakan untuk menampilkan


data dari beberapa tabel. Ada beberapa macam operasi
join, antara lain :

Operator
Deskripsi Contoh
Join
Menampilkan
SELECT NAMA_PEGAWAI,
data dari
Cartesian NAMA_DEPARTEMEN
beberapa tabel
Product FROM PEGAWAI P,
tanpa kondisi
DEPARTEMEN D
tertentu.
SELECT NAMA_PEGAWAI,
Menampilkan
NAMA_DEPARTEMEN
data dari
Join FROM PEGAWAI P,
beberapa tabel
Condition DEPARTEMEN D
dengan kondisi
WHERE P.NO_DEP=
tertentu
D.NO_DEPARTEMEN;
Outer Join Menampilkan SELECT P. NAMA_PEGAWAI,
data dari M. NAMA_PEGAWAI AS
beberapa tabel MANAJER
dimana kolom FROM PEGAWAI P,

Pengantar Dasar Database 2 36


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

yang diacu PEGAWAI M


tidak memiliki WHERE P.NO_MANAJER =
anggota M.NO_PEGAWAI(+);

Query Bersarang
Pada kondisi tertentu, terkadang beberapa query
membutuhkan nilai yang dihasilkannya dan digunakan
sebagai kondisi pembandingan (dalam klausa WHERE sebagai
contoh). Query tersebut dapat diformulasikan menggunakan
nested query (query bersarang). Query bersarang akan
melibatkan query dan subquery.
Subquery merupakan statement SELECT yang bersarang
didalam klausa WHERE dari statement SELECT yang lain.
Meskipun jarang, tetapi subquery juga bisa terdapat pada
statement DML yang lain seperti INSERT, UPDATE ataupun
DELETE.

Secara umum, sintaks dari NESTED QUERY adalah:

SELECT [DISTINCT] select_list


FROM table1, table_2 [,table_3 …]
WHERE {expression
{[NOT] IN | comparison operator} | [NOT] EXIST }
( SELECT [DISTINCT] subquery_select_list
FROM table_list
WHERE search_conditions
)

Yang dilakukan oleh subquery adalah menetapkan kondisi


pencarian pada klausa WHERE dalam beberapa cara:
Menghasilkan list untuk klausa IN
Mengembalikan sebuah nilai yang dapat digunakan oleh
operator
Mengembalikan nilai boolean (true atau false)

Pengantar Dasar Database 2 37


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Didalam sebuah SELECT statement, subquery boleh berada


pada klausa-klausa berikut ini:
 Klausa WHERE
 Klausa HAVING
 Klausa FROM
 Klausa START WITH (pada query hirarki)
Sebagai catatan, subquery pada klausa WHERE sering disebut
sebagai nested subquery. Sedangkan subquery pada klausa
FROM sering disebut dengan istilah inline view.

Banyak permasalahan yang dapat dipecahkan dengan


menggunakan subquery. Daftar berikut ini menunjukkan
beberapa kegunaan subquery:
 Memberikan nilai sebagai kondisi di dalam klausa
WHERE, HAVING, dan START WITH (subquery pada
SELECT, UPDATE, dan INSERT statement).
 Menentukan sekumpulan baris data untuk kebutuhan
membuat view (subquery pada CREATE VIEW
statement).
 Mendefinisikan sebuah tabel (inline view) yang
digunakan oleh query utama (subquery pada klausa
FROM dari sebuah SELECT statement).
 Menentukan sekumpulan baris data yang dimasukkan
ke dalam tabel tujuan, baik ke dalam tabel yang sudah
ada (subquery pada INSERT statement) maupun pada
saat yang bersamaan dengan pembuatan tabel
(subquery pada CREATE TABLE statement).
 Mendapatkan satu nilai atau lebhih yang digunakan
untuk mengubah data yang sudah ada (subquery pada
UPDATE statement).

Klausa IN
Subquery yang dilakukan menggunakan klausa IN akan
dilakukan pengecekan apakah suatu nilai ada atau tidak
dalam hasil dari subquery.
Contoh :
SELECT A1 FROM A WHERE A1 IN (SELECT C3 FROM C)
Hasilnya sbb:
A1 A2
Pengantar Dasar Database 2 38
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2 100

Klausa ALL
Membandingkan nilai dengan setiap nilai yang
dikembalikan oleh query tersarang. Kondisi
perbandingan akan bernilai benar jika semua nilai yang
dikembalikan oleh subquery memenuhi kondisi tersebut.
Contoh :
SELECT * FROM A WHERE A1 < ALL(SELECT C3 FROM C)
Hasilnya sbb:
A1 A2
1 10

Klausa ANY/SOME
Membandingkan nilai dengan salah satu nilai yang
dikembalikan oleh query tersarang. Kondisi
perbandingan akan bernilai benar jika salah satu nilai
yang dikembalikan oleh subquery memenuhi kondisi
tersebut dan akan bernilai salah atau tidak terpenuhi jika
subquery tidak mengembalikan nilai apapun (tabel
kosong).
Contoh :
SELECT * FROM A WHERE A1 < ANY(SELECT C3 FROM C)
Hasilnya sbb:
A1 A2
1 10
2 100

Klausa [NOT] EXISTS


Klausa EXISTS digunakan untuk melakukan pengecekan
apakah hasil dari nested query yang berkorelasi
menghasilkan baris data atau tidak. Operator exists
akan menghasilkan nilai “TRUE” jika subquery yang
mengikutinya menghasilkan paling tidak satu baris data.
Contoh :
SELECT * FROM A WHERE EXISTS (SELECT C3 FROM C)
Hasilnya sbb:

Pengantar Dasar Database 2 39


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

A1 A2
1 10
2 100

JURNAL

1. Buatlah query untuk menampilkan data-data


supplier( id supplier, nama) dan jumlah jenis buku yg
disupplay oleh supplier ybs!
2. Buatlah query untuk menampilkan data-data buku
beserta nama supplier dan jenis bukunya!
3. Jelaskan dan tuliskan output query dibawah ini, jika
query tersebut salah maka buatlah query yang benar:
select a.id_buku, (select kategori from jenis
where id_jenis=a.id_jenis) as kategori,
(select nama from jenis where
id_supplier=a.id_supplier) as supplier,
a.judul from buku a where stock > 50;
4. Jelaskan dan tuliskan output query dibawah ini, jika
query tersebut salah maka buatlah query yang benar:
select a.id_jenis, a.kategori, sum(b.stock)
from jenis a, buku b where
a.id_jenis=id_supplier;

Pengantar Dasar Database 2 40


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Pengantar Dasar Database 2 41


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3 INSTALASI ORACLE

Overview

Sebelum menggunakan DBMS hal pertama yang harus kita


lakukan tentu saja adalah melakukan instalasi dan konfigurasi
DBMS. Hal ini juga berlaku ketika kita akan menggunakan
Oracle, ada beberapa hal yang harus diperhatikan baik
sebelum maupun pada saat instalasi dan konfigurasi. Pada
bab ini akan dibahas mengenai persyaratan dan cara instalasi
dan konfigurasi oracle 10g.

Tujuan

7. Mahasiswa mengerti mengenai persyaratan sistem yang


harus dipersiapkan untuk instalasi oracle.
8. Mahasiswa memahami tetang cara konfigurasi Oracle 10g.
Instalasi Oracle 42
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Pendahuluan
Secara umum, guide ini berlaku untuk semua instalasi Oracle.
Di semua OS baik Windows maupun Unix (Sun Solaris, IBM
AIX, HP UX, Linux, dan lain-lain) proses instalasi itu sama,
hanya sedikit berbeda di pre-installation requisite-nya.

Hal-hal yang perlu diperhatikan sebelum proses


instalasi
Secara umum, berikut ini spesifikasi yang diminta oleh
instalasi tipe ini. Lebih detail tentang spesifikasi komputer
yang bisa di-install, lihat dokumentasi (installation guide)
yang ada di paket software yang telah di download; saya
cantumkan juga direferensi. Dalam contoh ini instalasi
dilakukan pada windows XP service pack 2.
Hardware:

 Physical memory (RAM) : 256 MB minimum, 512 MB


recommended

 Virtual memory: dua kali RAM

 Disk space: kira-kira 5 G

 Video (monitor) adapter: 256 colors

 Processor : 550 MHz minimum


Operating system (OS):

Instalasi Oracle 43
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Windows 2000 with service pack 1 or later. All editions,


including Terminal

 Services and Microsoft Windows 2000 MultiLanguage


Edition (MLE)

 Windows Server 2003 - all editions

 Windows XP Professional

 Windows NT is not supported.


Pilihan instalasi Database Oracle 10g :

1. Enterprise Editon : Merupakan pilihan instalasi yang


membutuhkan lisensi. Selain fitur-fitur standar yang
dimiliki oracle, konfigurasi database dan management
tool serta fitur untuk data warehousing dan transaction
processing disertakan dalam pilihan instalasi ini.

2. Standard Edition : melakukan instalasi management


tool, distribusi penuh, replikasi, fitur-fitur untuk web,
dan fasilitas-fasilitas untuk membangun aplikasi.

3. Personal Edition : melakukan instalasi fitur yang sama


seperti pada Enterprise Edition tetapi hanya
mendukung single user development dan deployment
environment.

4. Custom : melakukan instalasi dengan cara memilih


fitur-fitur yang dibutuhkan secara manual.

Hal-hal yang perlu diperhatikan pada saat instalasi Oracle


10g:

Instalasi Oracle 44
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Ketika setup meminta memasukkan password ada


beberapa hal yang perlu diperhatikan antara lain:

 Pastikan panjang password 4 sampai dengan 30


karakter.

 Sertakan database character set seperti


underscore( _ ), dollar ( $ ), dan pound sign ( # )
karena akan dapat memperkuat password.

 Jangan memulai password dengan karakter numeric

 Jangan menggunakan username untuk password.

 Jangan menggunakan istilah-istilah yang sudah ada di


oracle untuk password.

 Jangan menggunakan password change_on_install


untuk account SYS.

 Jangan mengunakan password manager untuk account


SYSTEM.

 Jangan menggunakan password sysman untuk account


SYSMAN.

 Jangan menggunakan password dbsnmp untuk account


DBSNMP.

 Pastikan password terdiri dari karakter alphabet,


numeric, dan punctuation mark character.

 Jangan menggunakan kata-kata sederhana untuk


password seperti welcome, account, database, user,
dll.

 Jangan mengubah-ubah setingan Java Runtime


Environment (JRE) yang digunakan oleh oracle.

Instalasi Oracle 45
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Jika tipe instalasi yang anda pilih mengharuskan untuk


melakukan konfigurasi Database Configuration
Assistant dan Oracle Net Configuration Assistant
secara manual anda harus mendefinisikan secara
detail mengenai konfigurasi database dan jaringan.

Langkah-langkah instalasi
1. Jalankan command “setup.exe” yang ada di paket software
yang telah di
download. Kemudian muncul Install wizard (GUI). Lihat
gambarnya di sini

Instalasi Oracle 46
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Pilih option “Basic Installation”


Masukkan directory “Oracle Home Location”
Pilih “Installation Type”
Jangan pilih “Create Starter Database”
Klik button “Next”
2. Oracle installer akan mengecek OS kita, apakah
requirement-nya dipenuhi
atau tidak. Lihat gambarnya di sini

Instalasi Oracle 47
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Pastikan semua statusnya “Succeeded”. Kalau ada warning,


atau statusnya
bukan Succeed, bereskan dulu OS-nya. Kemudian klik button
“Next”

3. Dalam proses installasi, Oracle akan menjalankan program


java. Bila firewall
PC anda memblock java, dan muncul alert “Windows Security
Alert”, klik
tombol “Unblock”. Lihat gambarnya di bawah ini

Instalasi Oracle 48
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Muncul summary komponen Oracle Database 10g yang


siap kita install.

Kemudian klik tombol “Install”. Lihat gambarnya di bawah ini

Instalasi Oracle 49
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Installation progress. Lihat gambarnya di bawah ini

Instalasi Oracle 50
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Setelah itu akan dilakukan konfigurasi tambahan oleh


Oracle Installer. Kita

Instalasi Oracle 51
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

cukup perhatikan saja. Setelah konfigurasi selesai, klik tombol


“Next”.

Kadang-kadang kita tidak perlu kilk tombol Next tersebut


karena secara

otomatis wizard menuju ke berikutnya. Lihat gambarnya di


bawah ini

Instalasi Oracle 52
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7. Akhirnya instalasi selesai. Setelah itu klik tombol “Exit”.

Lihat gambarnya di bawah ini

JURNAL

Instalasi Oracle 53
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1. Lakukan instalasi Oracle 10g berdasarkan langkah-


langkah yang telah dijelaskan diatas, kemudian masuk
ke SQL Plus dan login sebagai user SYSTEM!

2. Jelaskan perbedaan antara Oracle 10g dan Oracle 10g


XE!

Instalasi Oracle 54
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4 PENGENALAN PL/SQL DAN TIPE


DATA

Overview

PL/SQL mengkombinasikan kemampuan manipulasi data SQL


dengan kemampuan bahasa prosedural, dengan kata lain
PL/SQL adalah SQL ditambah Procedural Language. PL/SQL
merupakan bahasa berstruktur blok yang berupa fungsi,
prosedur, dan blok anonim. Suatu blok biasanya ditujukan
untuk menyelesaikan suatu tugas tertentu dan suatu blok
boleh memiliki subblok (nested). Struktur blok PL/SQLitu
terdiri dari bagian deklarasi, bagian kode program, dan bagian
eksepsi untuk penanganan error.

Tujuan

1. Mengerti esensi penggunaan Percabangan


(pemilihan/kodisional) dalam PL/SQL.
2. Mengerti esensi penggunaan Pengulangan
(Looping/Iterasi) dalam PL/SQL.
3. Mengerti esensi penggunaan Sekuensial dalam PL/SQL.
4. Memahami bentuk umum Percabangan, Pengulangan
dan Sekuensial.
5. Mampu memecahkan masalah sederhana dengan

Instalasi Oracle 55
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

menggunakan Percabangan atau Pengulangan atau


Sekuensial dan mengimplementasikan ke dalam PL/SQL.

Pendahuluan
Karena pada SQL tidak mendukung pemrograman secara
prosedural, maka dikembangkanlah PL/SQL. PL merupakan
kependekan dari Procedural Language. PL/SQL
mengkombinasikan kekuatan dan kefleksibilitasan SQL
dengan pemrograman prosedural. PL/SQL memiliki
keistimewaan sebagai berikut:

 Programmer dapat mendeklarasikan variable untuk


digunakan selama pemrosesan statement.

 Programmer dapat menggunakan penanganan


kesalahan untuk mencegah kegagalan program.

 Programmer dapat menulis program yang interaktif


yang menerima input dari user.

 Programmer dapat membagi fungsi-fungsi ke dalam


blok-blok lojik dari kode. Teknik pemrograman secara
modular ini mendukung fleksibilitas selama
pengembangan aplikasi.

 Statement SQL dapat diproses secara simultan untuk


performansi keseluruhan yang lebih baik.

Variabel dan Tipe Data


Deklarasi Variabel dan Tipe Data
Bagian deklarasi variabel di antara kata kunci DECLARE dan
BEGIN. Penamaan variabel tidal bersifat case sensitive. Tipe
data variabel dapat berupa salah satu tipe data database
Oracle atau tipe data built in PL/SQL.
Sintaks:
Instalasi Oracle 56
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Identifier typedata [(presisi, skala)] [NOT NULL]


[:=iekspresi];

Dimana ekspresi bisa merupakan literal, variabel yang lain


atau sebuah ekspresi yang terdiri atas operator dan fungsi.
Jika nilai inisial/awal tidak diberikan, maka suatu variabel akan
diberikan nilai NULL untuk nilai inisialnya.
Contoh untuk data karakter:
alamat VARCHAR2(20);
kodepos CHAR(5) := ‘40257’;
Contoh untuk tipe data number:
gaji NUMBER(7,2);
jumlah NUMBER NOT NULL := 0;
Contoh untuk tipe data tanggal:
alamat VARCHAR2(20);
kodepos CHAR(5) := ‘40257’;
Tanda := dipakai untuk menugaskan (assign) nilai kepada
suatu variabel. Nilai inisial/awal atau disebut juga nilai default
adalah nilai yang diberikan pada saat awal variabel tersebut
dideklarasikan.
Tipe Data pada PL/SQL
Selain tipe data yang ada di Oracle SQL, PL/SQL menyediakan
beberapa tambahan tipe data yang dapat dideklarasikan
sebagai berikut:

Tipe Data Keterangan


BOOLEAN Data lojikal dengan nilai TRUE atau
FALSE.
DATE Data tanggal waktu. Nilai yang valid
adalah antara 1 Januari 4712 SM sampai
dengan 31 Desember 9999.
NUMBER [(p [,s])] Tipe data numerik dengan p angka
penting dan sejumlah s angka penting di
belakang koma. Nilai p adalah integer
dengan nilai maksimal 38 dan nilai s
berada pada rentang -84 sampai
dengan 127. Nilai s negatif berarti
pembulatan sampai dengan 10s
terdekat.

Instalasi Oracle 57
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

FLOAT Turunan dari NUMBER. Presisi sampai


dengan 38 digit.
DOUBLE Sama dengan FLOAT.
PRECISION
REAL Turunan dari number. Presisi sampai
dengan 18 digit.
DEC [(p [,s])] Sama dengan NUMBER [(p [,s])].
DECIMAL [( p [,s])] Sama dengan NUMBER [(p [,s])].
NUMERIC [(p [,s])] Sama dengan NUMBER [(p [,s])].
INTEGER [(n)] Sama dengan NUMBER [(n,0)].
INT [(n)] Sama dengan NUMBER [(n,0)].
SMALLINT [(n)] Sama dengan NUMBER [(n,0)].
BINARY_INTEGER Tipe variabel ini digunakan menyimpan
nilai mulai dari
-2.147.483.647 s/d 2.147.483.647
NATURAL Bagian dari binary integer, mampu
menyimpan mulai dari 0 s/d
2.147.483.647.
NATURALN Bagian dari binary integer, mampu
menyimpan mulai dari 0 s/d
2.147.483.647. Tipe data ini tidak boleh
bernilai NULL.
POSITIVE Bagian dari binary integer, mampu
menyimpan mulai dari 1 s/d
2.147.483.647
POSITIVEN Bilangan integer dengan rentang nilai 1
sampai dengan 2147483647. Tipe data
ini tidak boleh bernilai NULL.
SIGNTYPE Tipe data bilangan yang bernilai -1, 0
atau 1.
PLS_INTEGER Bilangan integer dengan rentang nilai
-2147483647 sampai 2147483647.
VARCHAR2(n) Data karakter dengan panjang tidak
tetap. Nilai n minimum sama dengan 1
dan maksimum sama dengan 32767
byte.
VARCHAR(n) Sama dengan VARCHAR2(n).
CHAR [(n)] Data karakter dengan panjang tetap

Instalasi Oracle 58
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

sebesar n byte. Nilai n maksimum


adalah 32767. Nilai n minimum dan juga
nilai default adalah 1.
STRING(n) Sama dengan VARCHAR2(n).
CHARACTER [(n)] Sama dengan CHAR(n).
LONG [(n)] Data karakter dengan panjang tidak
tetap. Nilai n maksimum sama dengan
32760 byte.
NCHAR [(n)] Data karakter dengan panjang tetap.
Panjang maksimum sama dengan 32767
byte. maksimum bergantung pada
national character set yang dipakai.
Nilai default adalah 1.
NVARCHAR2(n) Data karakter dengan panjang tidak
tetap. Panjang maksimum sama dengan
32767 byte. Nilai n maksimum
bergantung pada national character set
yang dipakai.
RAW(n) Data binary dengan panjang tidak tetap.
Nilai n maksimum sama dengan 32767
byte.
LONG RAW [(n)] Data binary dengan panjang tidak tetap.
Nilai n maksimum sama dengan 32760
byte.
ROWID Identitas baris pada suatu tabel-index
yang dinyatakan dengan string heksa
desimal. Identitas tersebut
menunjukkan posisi baris data. Tipe
data ini merupakan balikan dari kolom
palsu ROWID.
UROWID [(n)] Identitas baris pada suatu tabel-index
yang dinyatakan dengan string heksa
desimal. Nilai n adalah ukuran kolom
UROWID. Nilai n maksimum adalah 4000
byte.
BFILE Tipe data large object untuk data file.
BLOB Tipe data large object untuk karakter
binary.

Instalasi Oracle 59
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

CLOB Tipe data large object untuk karakter


satu byte.
NCLOB Tipe data large object untuk karakter
multi byte.
%TYPE Untuk mendeklarasikan variabel dengan
tipe data yang sesuai dengan suatu
kolom pada suatu tabel.
%ROWTYPE Untuk mendeklarasikan variabel dengan
tipe data yang sesuai dengan semua
kolom pada suatu tabel. Biasanya untuk
menampung suatu cursor.

Pendeklarasian Konstanta
Sintaks:
Identifier CONSTANT typedate[(presisi,skala)] :=
ekspresi;
Contoh:
pi CONSTANT NUMBER(9,2):=3.14;

Atribut Variabel
Jika menggunakan variabel yang menampung nilai dari suatu
kolom dari suatu tabel, maka sebaiknya menggunakan atribut
variabel. Hal ini untuk menghindari terjadinya kerepotan
seperti: user harus melihat struktur tabel yang terkait terlebih
dahulu untuk memberikan tipe data yang cocok. Selain itu jika
terjadi tipe data kolom maka deklarasi variabel tersebut harus
diubah juga.
Atribut variabel berfungsi untuk memberikan tipe data yang
sama dengan tipe data suatu kolom dari suatu tabel. Atribut
variabel juga dapat digunakan untuk tipe data record. Dengan
demikian, atribut variabel ada dua. Untuk atribut kolom
digunakan %TYPE, sedangkan untuk atribut record gunakan
%ROWTYPE. Cara penggunaannya ditunjukkan berikut ini:

Instalasi Oracle 60
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

[schema.]table.column%TYPE;

<cursor_name|[schema.]table>%ROWTYPE;
Sebagai contoh, varaiabel v_nama mempunyai tipe data yang
sama dengan kolom nama pada tabel pegawai. Deklarasi
variabel tersebut dapat dituliskan seperti ini:
v_nama mahasiswa.nama%type;
Selain dapat digunakan untuk variabel record, atribut
%ROWTYPE bisa dipakai pada variabel cursor. Dan untuk
mengakses baris-baris pada cursor atau record tersebut
digunakan format nama_var.COLUMN.
Contoh:
pgw_rec pgw_cur%rowtype;
Menugaskan Nilai ke Dalam Variabel
Sintaks:
identifier := ekspresi;
Dimana identifier adalah nama variabel target, atau field
untuk menerima nilai dari ekspresi. Sedang ekspresi mungkin
berupa literal, nama variabel lain yang sudah ada, atau suatu
ekspresi yang cukup kompleks yang diperlukan untuk
menentukan suatu nilai yang akan ditugaskan.
Contoh:
v_jumlah := 0;
Operator pada PL/SQL
Operator-operator SQL statement juga berlaku pada PL/SQL.
Berikut ini prioritas dari semua operator tersebut ditampilkan
pada tabel di bawah ini dengan prioritas yang lebih tinggi
ditempatkan pada baris yang lebih atas:

Operator Operasi
**, NOT Pemangkatan dan negasi logika
+, - Tanda positif dan negatif
*, / Perkalian dan pembagian
+, -, || Penjumlahan., pengurangan dan
konkatinasi
=, <, >, <=, >=, <>, ! Perbandingan
=, IS NULL, LIKE,
BETWEEN, IN

Instalasi Oracle 61
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

AND Konjungsi
OR inklusi

Mencetak Keluaran pada Layar SQL*Plus


Untuk mencetak sebuah nilai pada layar SQL*Plus dapat
digunakan procedure PUT, PUT_LINE dan NEW_LINE yang
terdapat dalam package DBMS_OUTPUT. Package ini
merupakan salah satu package yang telah built in pada
Oracle.

Procedure PUT dan PUT_LINE membutuhkan sebuah argumen


berupa NUMBER, VARCHAR2 ataupun DATE. Kedua procedure
tersebut akan menyimpan argumen tersebut ke dalam buffer
dan akan ditampilkan di layar bila procedure tersebut
dijalankan.

Procedure NEW_LINE tidak membutuhkan argumen apapun.


Procedure ini berfungsi untuk menyimpan karakter new line
ke dalam buffer.

Namun sebelum procedure tersebut dijalankan, harus


dijalankan perintah “SET SERVEROUTPUT ON” untuk
mengaktifkan pencetakan ke layar dengan menggunakan
procedure yang ada pada package DBMS_OUTPUT.
SET SERVEROUTPUT <ON|OFF> [SIZE n] [FOR[MAT]
<WRA[PPED] | WOR[D_WAPPED] | TRU[NCATED]]

Pilihan SIZE n bertujuan untuk menentukan jumlah byte


maksimum yang dapat ditampung oleh buffer. Nilai n ini tidak
boleh kurang dari 2000 dan tidak boleh lebih dari 1.000.000.
Nilai defaultnya 2000. pilihan format bertujuan untuk
menetukan format keluaran. WRAPPED akan melanjutkan
bagian yang tidak mencukupi dari suatu baris ke baris yang
baru. Pilihan TRUNCATE akan memotong bagian yang
melampaui ukuran satu baris tepat pada karakter yang
berada setelah batas maksimum baris. Ukuran satu baris,
yakni jumlah karakter maksimum dalam satu baris,
ditentukan oleh sistem variabel LINESIZE.

Instalasi Oracle 62
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Struktur Blok PL/SQL


Terdapat dua macam blok pada PL/SQL yaitu blok bernama
dan blok tidak bernama (anonymous block), dimana blok-blok
ini akan membentuk suatu unit PL/SQL. Blok-blok yang
bernama bisa disimpan dan dapat berupa procedure, function
serta trigger. Sedangkan blok yang tidak bernama tidak dapat
disimpan dalam database kecuali jika dipakai sebagai subblok
dalam sebuah unit PL/SQL bernama.
Secara umum, satu blok PL/SQL yang lengkap terdiri
atas tiga bagian, yaitu: declaration section (bagian deklarasi
variabel), executable section (bagian pengeksekusian) serta
exception section (bagian penanganan kesalahan). Berikut ini
penggambarannya:
[DECLARE
...]  DECLARATION SECTION
BEGIN
...  EXECUTABLE SECTION
[EXCEPTION
...]  EXCEPTION SECTION
END;

Dengan declaration dan exception bersifat opsional, maka


satu bok PL/SQL paling tidak terdiri atas executable section.
Contoh:
begin
null;
end;
Catatan: Null dipakai untuk menyatakan nilai yang tidak
diketahui, sehingga untuk contoh di atas, blok PL/SQL
tersebut tidak melakukan proses apapun.

Instalasi Oracle 63
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1) DECLARATION SECTION
Digunakan untuk mendefinisikan atau
mendeklarasikan variabel, konstanta, cursor dan seluruh
exception yang didefinisikan oleh user yang akan digunakan
pada bagian eksekusi. Penulisan blok ini dimulai dengan
menulis DECLARE.
Contoh:
declare
v_nama mahasiswa.nama%type;
v_nim mahasiswa.nim%type;

2) EXECUTABLE SECTION
Digunakan untuk mengeksekusi atau menjalankan blok
perintah PL/SQL seperti pengulangan, percabangan, perintah
SQL dan perintah cursor. Berisi statement SQL untuk
memanipulasi data pada basis data dan statement PL/SQL
untuk memanipulasi data dalam blok.
Contoh:
declare
v_nama mahasiswa.nama%type;
v_nim mahasiswa.nim%type;
begin
select nim, nama into v_nim, v_nama
from pegawai
where nim=30108001
dbms_output.put_line(v_nama);
exception
when no_data_found then
dbms_output.put_line(‘gak ada’);
end;

3) EXCEPTION SECTION
Merupakan bagian yang akan diaktifkan bila terjadi
kesalahan atau pengecualian pada saat menjalankan program
PL/SQL. Exception section terdiri atas predefined dan user
defined. Sebagai contoh exception predefined

Instalasi Oracle 64
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

NO_DATA_FOUND akan diaktifkan bila perintah DML SQL tidak


menemukan data dalam klausa WHERE.
Contoh:
declare
v_nama mahasiswa.nama%type;
v_nim mahasiswa.nim%type;
begin
select nim, nama into v_nim, v_nama
from pegawai
where nim=30108001
dbms_output.put_line(v_nama);
exception
when no_data_found then
dbms_output.put_line(‘gak ada’);
end;

Struktur Kondisional
Perintah IF terdiri atas tiga bentuk, yaitu IF THEN, IF
THEN ELSE, serta IF THEN ELSEIF. Struktur dari
ketiganya ditampilkan dalam satu rumusan umum
sebagai berikut:

IF kondisi 1 THEN
Baris perintah...
[ELSIF kondisi 2 THEN
Baris perintah...]
...
[ELSE
baris perintah..]
END IF;

Instalasi Oracle 65
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Baris pada baris perintah dapat berupa perintah IF


sehingga akan membentuk blok IF bersarang. Bagian ELSIF
bisa muncul beberapa kali sesuai dengan kebutuhan
sedangkan bagian ELSE biasanya dipakai untuk menangani
kondisi jika semua kondisi pada kalang IF... THEN atau ELSIF...
THEN tidak terpenuhi. Namun bagian ELSE ini bisa saja tidak
digunakan.
contoh:
declare
penuh exception;
n1 number;
n2 number;
begin
if b1>n2 then
raise penuh;
else
dbms_ouput.put_line(‘bisa’);
end if;
end;

Struktur Iterasi
Pernyataan Loop
Untuk perintah LOOP, akan dilakukan pengulangan
terus-menerus. Bentuk umum dari pernyataan LOOP sebagai
berikut:
LOOP
//Baris perintah
END LOOP;

Instalasi Oracle 66
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Karena tidak mempunyai kondisi untuk keluar dari


iterasi, maka perlu digunakan perintah EXIT. Perintah EXIT
dapat digunakan dengan cara seperti berikut:
EXIT WHEN kondisi;

Contoh:
DECLARE
x number;
BEGIN
x := 0;
LOOP
x := x + 1;
EXIT WHEN x > 5; -- exit loop immediately
END LOOP;
dbms_output.put_line('Hasil looping : '||x);
END;

Bisa juga digunakan format seperti ini:


IF kondisi THEN
EXIT;
END IF;

Contoh:
DECLARE
x number;
BEGIN
x := 0;
LOOP
x := x + 1;
IF x > 5 THEN
EXIT; -- exit loop immediately

Instalasi Oracle 67
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

END IF;
dbms_output.put_line('Hasil looping ke- '||x);
END LOOP;
END;

DECLARE
vno number;
BEGIN
vno:=1;
LOOP
insert into coba(no) values vno;
vno:=vno+1;
if vno > 10 then
exit;
end if;
END LOOP;
END;

Pernyataan LOOP bisa diberi label atau nama,


sintaksnya sebagai berikut :
<<label_name>>
LOOP
sequence_of_statements
END LOOP label_nama; //optional

Contoh:
<<outer>>
LOOP
...
LOOP
...

Instalasi Oracle 68
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

EXIT outer WHEN ... -- exit both loops


END LOOP;
...
END LOOP outer;
Pada contoh diatas, saat EXIT maka akan keluar dari kedua
looping yang ada.
Pernyataan While - Loop
Perintah WHILE-LOOP akan terus melakukan iterasi
(memproses baris perintah secara berulang) selama KONDISI
bernilai TRUE. Bentuk umum dari pernyataan LOOP sebagai
berikut:
WHILE kondisi LOOP
//Baris perintah
END LOOP;

Contoh:
DECLARE
x number;
BEGIN
x := 0;
WHILE x <= 5 LOOP
x := x + 1;
dbms_output.put_line('Hasil looping ke- '||x);
END LOOP;
END;
Selain dapat digunakan pada perintah LOOP, perintah
EXIT ini juga dapat digunakan pada WHILE-LOOP untuk
menambahkan kondisi tertentu. Namun perintah EXIT ini
hanya bisa digunakan dalam loop saja.
Contoh:
DECLARE

Instalasi Oracle 69
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

vno number;
BEGIN
vno:=1;
WHILE vno <= 10 LOOP
insert into coba(no) values vno;
EXIT WHEN vno = 10;
vno:=vno+1;
END LOOP;
END;

Pernyataan For - Loop


Struktur pengulangan For digunakan untuk
menghasilkan pengulangan sejumlah kali tanpa penggunaan
kondisi apapun. Stuktur ini menyebabkan aksi diulangi
sejumlah beberapa kali (tertentu). Bentuk umum struktur for
ada dua macam yaitu : menaik (ascending) atau menurun

(descending). Sintaksnya sebagai berikut :


FOR counter IN [REVERSE] i_terendah .. i_teratas
LOOP
Baris perintah
END LOOP;
Perintah FOR-LOOP melakukan iterasi selama nilai
COUNTER berada dalam range nilai i_terendah dan i_teratas.
Pada FOR-LOOP, counter tidak perlu dideklarasikan.
Penggunaan kata kunci RESERVE akan menyebabkan nilai
counter dimulai dari i_teratas ke i_terendah. Dua titik antara
i_terendah dan i_teratas merupakan operator rentang nilai.
i_terendah maupun i_terkecil bisa berupa nilai integer
ataupun variabel yang bernilai integer yang sudah

Instalasi Oracle 70
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

dideklarasikan sebelumnya. i_upper harus lebih besar dari


i_lower dan jika tidak maka iterasi tidak akan dilakukan.
Contoh:
BEGIN
FOR vno IN 1..10 LOOP
insert into coba(no) values vno;
dbms_output.put_line('Hasil looping ke- '||x);
END LOOP;
END;

BEGIN
FOR vno IN REVERSE 1..10 LOOP
insert into coba(no) values vno;
dbms_output.put_line('Hasil looping ke- '||x);
END LOOP;
END;

Ruang Lingkup Pernyataan FOR – LOOP


Contoh :
DECLARE
ctr INTEGER; -- global variable
BEGIN
...
FOR ctr IN 1..25 LOOP
...
IF ctr > 10 THEN ... -- refers to loop counter
END IF;
END LOOP;
END;
Untuk menuju ke variabel global, harus ditambahkan label
dan notasi dot.

Contoh :

Instalasi Oracle 71
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

<<main>>
DECLARE
ctr INTEGER;
...
BEGIN
...
FOR ctr IN 1..25 LOOP
...
IF main.ctr > 10 THEN -- refers to global
variable
...
END IF;
END LOOP;
END main;

Hal ini juga berlaku untuk nested loop.


Contoh :
<<main>>
DECLARE
ctr INTEGER;
...
BEGIN
<<outer>>
FOR step IN 1..25 LOOP
FOR step IN 1..10 LOOP
...
IF outer.step > 15 THEN
...
END IF;
END LOOP;
END LOOP outer;
END main;

Selain dapat digunakan pada perintah LOOP, perintah


EXIT ini juga dapat digunakan pada FOR-LOOP untuk

Instalasi Oracle 72
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

menambahkan kondisi tertentu. Namun perintah EXIT ini


hanya bisa digunakan dalam loop saja.
Contoh:
BEGIN
FOR j IN 1..10 LOOP
FETCH c1 INTO mhs_rec;
EXIT WHEN c1%NOTFOUND;
...
END LOOP;
END;

BEGIN
<<outer>>
FOR i IN 1..5 LOOP
...
FOR j IN 1..10 LOOP
FETCH c1 INTO mhs_rec;
EXIT outer WHEN c1%NOTFOUND; -- exit both
FOR loops
...
END LOOP;
END LOOP outer;
-- control passes here
END;

Perintah GOTO
Perintah ini digunakan untuk mengarahkan proses ke
baris yang ditandai dengan label tertentu. Bentuk umum
pemakaian perintah ini adalah:
GOTO nama_label;
Untuk memberikan label pada suatu baris tertentu, gunakan
format penamaan label seperti berikut ini:

Instalasi Oracle 73
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

<<nama_label>>
Penggunaan perintah GOTO dalam jumlah yang banyak
akan menyebabkan suatu blok PL/SQL menjadi tidak
terstruktur. Karena itu sebaiknya penggunaan GOTO ini
dihindari.
Contoh:
DECLARE
x number;
BEGIN
x := 0;
LOOP
x := x + 1;
IF x = 5 THEN
GOTO EndOfLoop;
END IF;
END LOOP;
<<EndOfLoop>>dbms_output.put_line('Hasil
looping : '||x);
END;
Contoh:
create or replace procedure coba
(v_nim mahasiswa.nim %type) is

cursor mhs_cur is
select nim, nama, alamat
from mahasiswa
where nim=v_nim;

mhs_rec mhs_cur%rowtype;
begin
open mhs_cur;

<<iterasi>>
fetch mhs _cur into mhs _rec;

if mhs _cur%notfound then


goto lbl_end;

Instalasi Oracle 74
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

end if;

dbms_output.put_line(mhs _rec.nama_pegawai||' '||


mhs_rec.alamat||' '|| mhs_rec.gaji);

goto iterasi;

Dengan adanya perintah “goto iterasi”, proses berikutnya


menuju baris “<<iterasi>>” yang berada beberapa sebelum
baris goto tersebut. Selanjutnya, perintah-perintah yang
mengikutinya akan diproses sesuai dengan urutannya
(sekuensial). Sedangkan perintah “<<lbl_end>>”
menentukan proses berikutnya adalah baris “<<lbl_end>>”
yang berada setelah perintah goto tersebut.
Namun demikian, pada saat menggunakan perintah
goto harus diperhatikan hal-hal berikut:
 perintah goto tidak boleh menuju label yang berada
dalam perintah IF, LOOP, blok lain dan blok yang
menjadi sub bloknya.
 Sebuah label harus diikuti oleh paling tidak sebuah
perintah eksekusi PL/SQL. Kata atau reserved word
seperti END, END IF dan END LOOP tidak termasuk
sebagai perintah eksekusi. Tetapi NULL termasuk
perintah eksekusi.

Instalasi Oracle 75
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

JURNAL
1. Buatlah tampilan seperti ini pada SQL Plus:
1
3
5
7
8
11

2. Buatlah tampilan seperti ini pada SQL Plus:


1 3 5 7 9 11
3. Jelaskan maksud blok PL/SQL dibawah ini, jika nilai
variabel input_nilai = 8:
DECLARE
nilai1 number;
nilai2 number;
nilai3 number;

Instalasi Oracle 76
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

hasil number;
BEGIN
nilai1:=1;
nilai2:=1;
nilai3:='&input_nilai';
dbms_output.put_line(nilai1||' ');
dbms_output.put_line(nilai2||' ');
loop
hasil:=nilai1+nilai2;
if hasil>=nilai3 then
goto endloop;
end if;
dbms_output.put_line(hasil||' ');
nilai1:=nilai2;
nilai2:=hasil;
end loop;
<<endloop>>
dbms_output.put_line(' ');
END;
/

4. Jelaskan maksud blok PL/SQL dibawah ini, jika nilai


variabel input_nilai = 8:

DECLARE
batas_b number;
batas_a number;
BEGIN
batas_b:='&batas_bawah';
batas_a:='&batas_atas';
while batas_b<=batas_a loop
if mod(batas_b,2)=1 then
dbms_output.put_line(batas_b||'
');
end if;
Instalasi Oracle 77
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

batas_b:=batas_b+1;
end loop;
dbms_output.put_line(' ');
END;
/

Instalasi Oracle 78
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5 CURSOR

Overview

Pada Programming Language untuk Oracle pengambilan data


dari database yang dijalankan melalui sebuah queri atau
select statement hanya menghasilkan sebuah output.
Diperlukan cursor yang bisa digunakan untuk menampung
output sehingga berapa baris pengambilan data tidak menjadi
masalah

Tujuan

9. Mengetahui dan mengerti cursor.


10. Mampu mengimplementasikannya dalam
pemrograman di oracle.

Cursor 79
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Blok PL/SQL tidak memungkinkan untuk menangani


query dengan keluaran lebih dari satu baris(record) karena
variabel penampungnya harus mempunyai sebuah nilai.
Karena itu, diperlukan sebuah cursor untuk menampung
semua kondisi dari keluaran sebuah query. Cursor merupakan
suatu variabel yang digunakan untuk menampung hasil
query yang terdiri atas lebih dari satu row atau record. Cursor
dapat diilustrasikan sebagai penampung sekaligus pointer
atas hasil eksekusi query. Pada dasarnya perintah “SELECT ..”
pada PL/SQL merupakan sebuah cursor. Terdapat dua macam
cursor, yaitu: cursor implisit dan cursor eksplisit

Cursor Implisit
Merupakan perintah SELECT statement dengan klausa
INTO yang terdapat di dalam blok PL/SQL dan harus
menghasilkan satu baris record. Jika hasil cursor implisit
ini lebih dari satu baris atau tidak menghasilkan satu
baris pun, maka Oracle akan mengeluarkan pesan
kesalahan. Klausa into pada cursor implisit dipakai untuk
menugaskan nilai hasil proses select ke dalam variabel-
variabel yang dipilih.

Atribut Keterangan
TRUE jika cursor menghasilkan sebuah
SQL%FOUND baris dari queri yang dideklarasikan.
Sebaliknya FALSE.
SQL%NOTFOUND Kebalikan dari %FOUND
Jumlah baris yang telah
SQL%ROWCOUNT
diambil/ditangkap (FETCH)
Mengembalikan nilai TRUE jika cursor
SQL%ISOPEN
masih dalam keadaan terbuka (OPEN)

Cursor 80
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Contoh:
declare
mhs_rec mahasiswa%rowtype;
nim_nya mahasiswa.nim%type;
begin
nim_nya := '30108001';
select nim, nama, alamat into mhs_rec
from nahasiswa
where nim = nim_nya;
...
end;

Jika nilai nim sama dengan 30108001 dipenuhi maka hasil


proses select menghasilkan satu baris, sedangkan jika nilai
nim_nya diganti dengan nilai lain dimana nilai tersebut tidak
akan menghasilkan satu baris pun, maka Oracle akan
mengeluarkan pesan kesalahan. Demikian pula jika klausa
where pada cursor di atas dihilangkan sementara di dalam
tabel proyek terdapat lebih dari satu baris, maka cursor
tersebut tidak dapat menampung semua baris yang diterima.
Hal ini akan menimbulkan error “exact fetch returns more
than requested number of rows”.

--IMPLICIT CURSOR CONTOH 1.


declare
vnim mahasiswa.nim%type:='&nim_mhs';
vnama mahasiswa.nama%type;

begin
select nim,nama into vnim,vnama

Cursor 81
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

from mahasiswa
where nim =vnim;
dbms_output.put_line('Nim : '||vnim);
dbms_output.put_line('Nama mahasiswa : '||vnama);

exception
when no_data_found then
dbms_output.put_line('Tidak ada mahasiswa
dengan nim : '||vnim);
when too_many_rows then
dbms_output.put_line('Data yang dihasilkan
lebih dari 1 baris');
end;
/

-- IMPLICIT CURSOR CONTOH 2.


declare
vnim mahasiswa.nim%type:='&nim_mhs';
vnama mahasiswa.nama%type;
n number;

begin
select nim,nama into vnim,vnama
from mahasiswa
where nim =vnim;
n := sql%rowcount;
dbms_output.put_line('Data Mahasiswa');
if sql%found then
dbms_output.put_line('Nim : '||vnim);
dbms_output.put_line('Nama : '||vnama);
dbms_output.put_line('Jumlah data : '||n);
end if;

exception
when no_data_found then
dbms_output.put_line('Tidak ada mahasiswa dengan
nim: '||vnim);

Cursor 82
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

when too_many_rows then


dbms_output.put_line('Data yang dihasilkan lebih
dari 1 baris');
end;
/

-- IMPLICIT CURSOR CONTOH 3.


declare
vnama mahasiswa.nama%type :='&nama_mhs';
-- masukkan paijo misal ada 2 mahasiswa dengan
nama depan paijo
n number;

begin
update mahasiswa set alamat='SKB'
where nama like vnama||'%';
n := sql%rowcount;
if sql%found then
dbms_output.put_line('Mahasiswa dengan nama
depan '||vnama||' telah di update');
dbms_output.put_line('Jumlah data yang diupdate
= '||n);
else
dbms_output.put_line('Tidak ada mahasiswa
dengan nama depan : '||vnama);
dbms_output.put_line('Jumlah data yang diupdate
= '||n);
end if;

exception
when too_many_rows then
dbms_output.put_line('Data yang dihasilkan lebih
dari 1 baris');
end;
/

Cursor 83
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Cursor Eksplisit
Tidak seperti cursor implisit, cursor eksplisit harus
dideklarasikan terlebih dahulu sebelum digunakan.
Terdapat empat tahapan penggunaan cursor eksplisit ini
yaitu: declare, open, fetch dan terakhir adalah close.

Statement declare:
CURSOR nama_cursor IS query

Merupakan deklarasi nama cursor dan definisi struktur


query yang akan dilakukan di dalamnya.

Contoh:
DECLARE
CURSOR CUR1 IS
SELECT nim, nama, alamat
FROM mahasiswa
.. .. ..

Statement open
OPEN nama_cursor;

Sebelum suatu cursor dapat digunakan, cursor harus


dibuka terlebih dahulu.

Contoh:
OPEN CUR1;

Cursor 84
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Statement fetch
FETCH nama_cursor INTO <variable1,variable2,..>;

Fetch merupakan perintah untuk mengambil isi cursor,


dimana isi dari cursor tersebut adalah hasil query yang
telah dideklarasikan pada statement deklarasi cursor.
Dan tiap-tiap field hasil query tersebut kemudian
ditampung dalam variable-variable yang tipe datanya
sesuai dengan tipe-tipe kolom query pada statemen
deklarasi. Fetch ini dilakukan untuk tiap-tiap baris.

Contoh:
FETCH CUR1 INTO v_nim, v_nama, v_alamat;

Statement close
CLOSE nama_cursor;

Setelah pemrosesan query selesai, cursor harus ditutup


dengan satatemen CLOSE ini. Berikut ini adalah atribut-
atribut untuk mendapatkan status cursor. Setiap atribut
dalam penggunaannya harus didahului dengan nama
cursor.

Atribut Keterangan
nama_cursor%FOUND TRUE jika cursor
menghasilkan sebuah
baris dari queri yang
dideklarasikan.

Cursor 85
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sebaliknya FALSE.
nama_cursor%NOTFOUND Kebalikan dari %FOUND
nama_cursor%ROWCOUNT Jumlah baris yang di-
fetch atau diambil
dari active set.
nama_cursor%ISOPEN TRUE jika cursor
sedang terbuka dan
FALSE jika sebaliknya.

Contoh:
DECLARE
v_nama varchar2(20);
v_nim char(9);
CURSOR CUR1 IS SELECT NAMA, NIM
FROM MAHASISWA;
BEGIN
OPEN CUR1;
FETCH CUR1 INTO v_nama, v_nim;
WHILE CUR1%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(v_nama);
DBMS_OUTPUT.PUT_LINE(v_nim);
FETCH CUR1 INTO v_nama, v_nim;
END LOOP;
CLOSE CUR1;
END;

Cursor 86
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Cursor FOR LOOP

Ada sebuah cara untuk mengambil isi cursor secara


otomatis, yaitu dengan struktur pengulangan FOR LOOP.
Disebut otomatis karena
 tidak perlu proses pembukaan cursor ( OPEN )
 memanipulasi proses pengambilan cursor ( FETCH )
 tidak perlu penutupan cursor ( CLOSE )
 variabel indeks yang digunakan dalam struktur
pengulangan FOR_LOOP tidak perlu dideklarasikan
terlebih dahulu

Sintaks:
DECLARE
CURSOR nama_cursor IS ekspresi-query

BEGIN
FOR nama_record IN nama_cursor LOOP
-- nama_record tidak perlu dideklarasikan
...
END LOOP
END;

Contoh:
DECLARE
CURSOR cur1 IS select nama from mahasiswa;

BEGIN
FOR rec IN cur1 LOOP
dbms_output.put_line(rec.nama);

Cursor 87
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

END LOOP
END;

Nama record yang didefinisikan sesudah for merupakan


pendeklarasian yang hanya internal di dalam loop, dan ruang
lingkupnya bersifat internal sampai loop berhenti. Sebenarnya
di dalam loop for, cursor tidak harus dideklarasikan terlebih
dahulu.

-- EKSPLISIT CURSOR CONTOH 1.


(Menggunakan LOOP-EXIT)
declare
vnim mahasiswa.nim%type;
vnama mahasiswa.nama%type;

cursor cursor1 is
select nim, nama from mahasiswa;
n number;

begin
dbms_output.put_line('Data Mahasiswa);
dbms_output.put_line('No Nim Nama');
open cursor1;
loop
fetch cursor1 into vnim, vnama;
exit when cursor1%notfound;
dbms_output.put_line(cursor1%rowcount||'.
'||vnim||' '||vnama);
end loop;
n := cursor1%rowcount;
dbms_output.put_line('Jumlah data = '||n);
close cursor1;

exception

Cursor 88
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

when no_data_found then


dbms_output.put_line('Tidak ada data
mahasiswa');

end;
/

-- EKSPLISIT CURSOR CONTOH 2.


(Menggunakan WHILE-LOOP)
declare
vnim mahasiswa.nim%type;
vnama mahasiswa.nama%type;
cursor cursor1 is
select nim, nama from mahasiswa;
n number;

begin
dbms_output.put_line('Data Mahasiswa);
dbms_output.put_line('No Nim Nama');
open cursor1;
fetch cursor1 into vnim, vnama;
while cursor1%found loop
dbms_output.put_line(cursor1%rowcount||'.
'||vnim||' '||vnama);
fetch cursor1 into vnim, vnama;
end loop;
n := cursor1%rowcount;
dbms_output.put_line('Jumlah data = '||n);
close cursor1;

exception
when no_data_found then
dbms_output.put_line('Tidak ada data mahasiswa);

end;
/

Cursor 89
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

-- EKSPLISIT CURSOR CONTOH 3.


(Menggunakan FOR-IN-LOOP)
declare
cursor cursor1 is
select nim, nama from mahasiswa;
n number;

begin
dbms_output.put_line('Data Mahasiswa);
dbms_output.put_line('No Nim Nama');
for x in cursor1 loop
-- x tidak perlu di deklarasikan
dbms_output.put_line(cursor1%rowcount||
'.'||x.nim||' '||x.nama);
n := cursor1%rowcount;
end loop;
dbms_output.put_line('Jumlah data = '||n);

exception
when no_data_found then
dbms_output.put_line('Tidak ada data mahasiswa');
end;
/

-- EKSPLISIT CURSOR CONTOH 4.


(Menggunakan FOR-IN-LOOP tanpa
mendeklarasikan cursor)
declare
n number:=0;

begin
dbms_output.put_line('Data Mahasiswa);
dbms_output.put_line('No Nim Nama');
for x in (select nim, nama from mahasiswa)
loop

Cursor 90
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

-- x tidak perlu di deklarasikan


n := n + 1;
dbms_output.put_line(n||'. '||x.nim||
' '||x.nama);
end loop;
dbms_output.put_line('Jumlah data = '||n);

exception
when no_data_found then
dbms_output.put_line('Tidak ada data mahasiswa');

end;
/

JURNAL
1. Jelaskan perbedaan antara cursor dengan
perintah SELECT!
2. Buatlah cursor implisit dan eksplisit yang
menampilkan data-data buku beserta
suppliernya!
3. Jelaskan maksud dan keluaran dari blok PL/SQL
dibawah ini:
declare
vid_buku buku.id_buku%type;
vjudul buku.judul%type;
cursor cursor1 is
select id_buku, judul from buku;
n number;

begin
dbms_output.put_line('Data Buku);
dbms_output.put_line(id_buku Judul);
open cursor1;
fetch cursor1 into vid_buku, vjudul;
while cursor1%found loop
dbms_output.put_line(cursor1%rowcount||’
.'||vid_buku||' '||vjudul);
fetch cursor1 into vid_buku, vjudul;
end loop;

Cursor 91
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

n := cursor1%rowcount;
dbms_output.put_line('Jumlah data = '||n);
close cursor1;

exception
when no_data_found then
dbms_output.put_line('Tidak ada data
buku);

end;
/

4. Jalankan blok PL/SQL dibawah ini pada SQL Plus


kemudian jika terjadi error perbaiki :
DECLARE
v_idsupplier supplier.id_supplier%TYPE;
v_nama supplier.nama%TYPE;
v_no_telepon supplier.no_telepon%TYPE;
v_alamat supplier.alamat%TYPE;
BEGIN
select id_supplier, nama, no_telepon,
alamat into vid_supplier, vnama,
vno_telepon, valamat
from supplier order by id_supplier;
if SQL%NOTFOUND then
dbms_output.put_line('Nama Pemesan
Tidak Ditemukan ');
else
dbms_output.put_line('Daftar Nama
Pemesan yang Total Banquetnya <=
500000 :');
dbms_output.put_line(v_npm);
end if;
END;
/

Cursor 92
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6 ERROR HANDLING

Overview

Jika terdapat kesalahan, maka pada Oracle akan muncul


pesan kesalahan yang kurang dipahami user. Handling error
dimaksudkan untuk menangani hal tersebut.

Tujuan

11. Mampu memahami cara kerja exception.


12. Mampu memahami Predefined Exception pada Oracle.
13. Mampu memahami User Defined Exception.
14. Mampu memahami Unhandled Exception.
15. Mampu memahami penggunaan
RAISE_APPLICATION_ERROR
16. Mampu memahami EXCEPTION INIT PRAGMA.
17. Mampu menerapkannya exception dalam PL/SQL di
Oracle.

Handling Error 93
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

18. Mampu Menguasai dan menerapkan Multi Blok dalam


PL/SQL

ERROR HANDLING (EXCEPTION)

Setiap kesalahan (error) atau peringatan (warning) yang


muncul karena suatu perintah disebut dengan exception.
Bagian exception ini ditujukan untuk menangani exception
tersebut. Bagian ini disebut juga exception handler,
sedangkan mekanisme penanganan exception itu disebut
exception handling. Jika tidak terdapat EXCEPTION dalam
sebuah blok, maka semua proses akan terhenti dengan tanpa
adanya penanganan kesalahan. Sebaliknya jika terdapat
exception section, maka semua perintah berikutnya dalam
bagian executable section tidak dieksekusi dan proses akan
berpindah ke bagian exception handler.

Cara Kerja EXCEPTION

Setiap kali exception muncul, semua perintah berikutnya di


dalam executeble section tidak dieksekusi dan proses akan
berpindah ke exception handler.
Contoh:
DECLARE
...
BEGIN
...
SELECT NIM INTO vnim FROM MAHASISWA
WHERE...
...
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE(‘DATA TIDAK ADA’);
END;

Handling Error 94
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Misalkan ketika proses SELECT tidak menghasilkan baris data


apapun, Oracle akan membangkitkan error dengan kode ORA-
01403. Begitu error tersebut muncul, proses akan berpindah
ke bagian exception section.

Bentuk umum blok exception adalah sebagai berikut:

Handling Error 95
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

EXCEPTION
WHEN exception1 [OR exception2 [OR ...]] THEN
Statement-statement
[ WHEN exceptiona [OR exceptionb [OR ...]] THEN
statement-statement ]
...
[ WHEN OTHERS THEN
statement-statement ]

Beberapa jenis kesalahan yang umum terjadi antara lain :


Jenis Error Keterangan
Syntax Error Misal kurang tanda ; dan ‘
dalam penulisan statement
Logic Error Loop yang tanpa berhenti,
urutan dari operator
Compile Error Penggunaan perintah yang
salah yang baru diketahui
pada saat di compile
Run Time Error Error yang terjadi pada saat
program dijalankan

Predefined EXCEPTION
Beberapa jenis error yang sangat umum dimasukkan ke
dalam predefined exception sehingga seorang user dapat
membuat penanganan error terhadap exception yang umum
tersebut tanpa harus mengetahui kode error-nya.

Nama Exception Kode Error Deskripsi


CURSOR_ALREADY_OPE Membuka cursor
ORA-06511
N yang sedang terbuka
DUP_VAL_ON_INDEX ORA-00001 Memasukkan nilai
duplikat pada kolom
unik
INVALID_CURSOR ORA-01001 Operasi cursor ilegal

Handling Error 96
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

INVALID_NUMBER ORA-01722 Gagal mengkonversi


karakter ke NUMBER.
LOGIN_DENIED ORA-01017 Login dengan
username atau
password yang salah.
NO_DATA_FOUND ORA-01403 SELECT INTO
statement tidak
menghasilkan baris
data.
NOT_LOGGED_ON ORA-01012 Mengakses database
tetapi tidak
terkoneksi.
PROGRAM_ERROR ORA-06501 Terjadi PL/SQL
internal error.
ROWTYPE_MISMATCH ORA-06504 Dalam satu
penugasan, tipe data
antara cursor,
variabel dengan
PL/SQL cursor tidak
cocok
STORAGE_ERROR ORA-06500 Memori rusak atau
proses membutuhkan
memori yang lebih
besar.
TIMEOUT_ON_RESOURC ORA-00051 Time out.
E
TOO_MANY_ROWS ORA-01422 SELECT INTO
statement
menghasilkan lebih
dari satu baris data.
VALUE_ERROR ORA-06502 Kesalahan pada
operasi aritmetika,
konversi, truncate
atau batasan rentang
nilai.
ZERO_DIVIDE ORA-01476 Membagi dengan nol.

Handling Error 97
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Contoh:
DECLARE
v_pembagi NUMBER := ‘&v_pembagi’;
v_hasil NUMBER := 1000;

BEGIN
v_hasil := v_hasil/v_pembagi;
DBMS_OUTPUT.PUT_LINE(v_hasil);

EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE(‘dibagi dengan nol’);
END;

User Defined EXCEPTION


Merupakan exception yang dibuat oleh user dan diaktifkan
dengan perintah RAISE.
Sintaks:
Identifier EXCEPTION;

Dan dibangkitkan dengan perintah:


RAISE Identifier;

Handling Error 98
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Unhandled EXCEPTION
Penggunaan kata kunci OTHERS yang digunakan untuk
menampilkan kesalahan dan keterangan kesalahan pada
exception others. Jenis exception OTHERS ini digunakan untuk
menangani semua kesalahan yang tidak ditangani. Sebaiknya
hindari penggunaan exception OTHERS ini dihindari karena
tidak menangani exception yang sifatnya spesifik.

Contoh:
DECLARE
Exep_lebih EXCEPTION;
v1 NUMBER := ‘&v1’;
v2 NUMBER := 99;

BEGIN
If v1 > v2 then
RAISE Exep_lebih;
else
DBMS_OUTPUT.PUT_LINE('volume masih bisa
menampung');
End if;

EXCEPTION
WHEN Exep_lebih THEN
DBMS_OUTPUT.PUT_LINE('volume '|| v1
||'lebih dari '|| v2);
WHEN OTHERS then
DBMS_OUTPUT.PUT_LINE('volume tidak bisa
menampung');
END;

Handling Error 99
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Menggunakan RAISE_APPLICATION_ERROR

RAISE_APPLICATION_ERROR merupakan sebuah prosedur yang


disediakan oleh Oracle yang dapat digunakan untuk membuat
dan sekaligus membangkitkan sebuah exception dengan cara
membuat pesan dan nomor kesalahan untuk sebuah aplikasi.
Nomor kesalahan harus berada dalam rentang nilai -20999
dan
-20000.

Sintaks:
RAISE_APPLICATION_ERROR
(angka_kesalahan, pesan [TRUE|FALSE]);

Contoh:

Begin
Insert into mahasiswa(nim, nama, alamat)
Values('30108001','jammie', 'pga');

Exception
When DUP_VAL_ON_INDEX then
Raise_application_error (-20000, 'nim
mahasiswa harus unik');

End;
Handling Error 100
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

EXCEPTION INIT PRAGMA


Exception_init pragma memungkinkan dibuatnya suatu
exception (yang sifatnya sama dengan predefine exception)
yang dikaitkan dengan nomor kesalahan. Keuntungan dari
penggunaan exception_init ini adalah tidak diperlukan lagi
pengecekan kondisi secara eksplisit.

Contoh:
declare
v_nama varchar2(20) := ‘&vnama’;
v_nim char(9) := ‘&vnim’;
v_alamat varchar2(25) := ‘&valamat’;
jangan_null exception;
kepanjangan exception;
pragma exception_init(jangan_null,-1400);
pragma exception_init(kepanjangan,-6502);

begin
insert into Mahasiswa
values(v_nim,v_nama,v_alamat);

exception
when jangan_null then
dbms_output.put_line('kolom harus diisi');
when kepanjangan then
dbms_output.put_line('isinya kepanjangan');
when others then

Handling Error 101


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

dbms_output.put_line('apa coba yang salah?');

end;

JURNAL

1. Sebutkan dan jelaskan kegunaan dari error


handling pada PL/SQL!
2. Tambahkan exception pada blok PL/SQL dibawah
ini

DECLARE
pe_ratio NUMBER(3,1);
BEGIN
SELECT price / earnings INTO pe_ratio FROM
buku
WHERE id_jenis = 'IT’; -- might cause
division-by-zero error
INSERT INTO stats (symbol, ratio) VALUES
('XYZ', pe_ratio);
COMMIT;
END; -- exception handlers and block end here

3. Buatlah cursor untuk mengambil nilai stok buku


pada tabel buku kemudian buatlah exception
untuk menangani kesalahan ketika stok buku
yang dihasilkan bernilai nol.

Handling Error 102


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Handling Error 103


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7 STORED PROGRAM

Overview

Pada Programming Language setiap iterasi dijalan secara


terurut. Jika akan menjalankan kegiatan yang sebenarnya
sama developer perlu mendeklarasikan ulang apa yang telah
dibuat sebelumnya. Stored program dibuat untuk mengatasi
hal tersebut. Sehingga menghemat tenaga dan lebih
memudahkan dalam memodifikasi sebuah program.

Tujuan

19. Mengetahui dan memahami procedure.


20. Mengetahui dan memahami function.
21. Mampu mengimplementasikan procedure dan function
dalam pemrograman di oracle.

Stored Program 104


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Procedure
Non Nested Procedure
Non nested Procedure atau stored procedure merupakan
sekumpulan blok PL/SQL yang tersimpan di dalam
skema database dan dapat dieksekusi secara berulang
kali jika user memiliki privilege untuk mengeksekusi
procedure tersebut. Nama procedure yang dibuat
nantinya akan menjadi objek dengan tipe procedure.
Procedure akan dieksekusi pada saat pemanggilan
setelah sebelumnya dibuat terlebih dahulu.

Sintaks Pendeklarasian:
CREATE [OR REPLACE] PROCEDURE nama_procedure
[argumen1 tipe_data,
argumen2 tipe_data,...]
AS
[deklarasi variabel lokal]
BEGIN
badan_prosedur
EXCEPTION
END;

Stored Program 105


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Keterangan
nama_procedure : nama dari procedure yang akan
dibuat
argumen : parameter-parameter yang dipakai
saat pemanggilan procedure
badan_prosedur : tempat blok PL/SQL yang memuat
baris kode.

Contoh :
CREATE OR REPLACE PROCEDURE tambahMahasiswa
(
v_nim mahasiswa.nim%type;
v_nama mahasiswa.nama%type;
v_alamat departemen.lokasi%type
)

IS
BEGIN
insert into mahasiswa
values(v_nim,v_nama,v_alamat);
END;

Setelah procedure dibuat, dijalankan dengan sintaks


berikut.

EXECUTE
nama_procedure(parameter_1,parameter_2,...);

Contoh :
EXECUTE tambahMahasiswa
(‘30108002’,‘paimen’,‘sukapura’);

Untuk menghapus procedure yang telah kita buat, dapat


menggunakan sintaks berikut

Stored Program 106


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

DROP PROCEDURE nama_procedure;

Contoh :
DROP PROCEDURE tambahMahasiswa;
Nested Procedure
Adalah procedure yang dideklarasikan di dalam
Declaration Section suatu blok PL/SQL yang anonim.
Karena dideklarasikan di dalam blok PL/SQL yang
anonim maka nested procedure tidak disimpan dalam
basis data dan tidak dapat dijalankan oleh blok lain
kecuali dideklarasikan kembali oleh blok tersebut.

Contoh :
DECLARE
PROCEDURE CETAK(kata varchar2, n number) IS
BEGIN
FOR i IN 1..n LOOP
DBMS_OUTPUT.PUT_LINE(to_char(i)||
’. ‘||kata);
END LOOP;
END CETAK;

BEGIN
CETAK(‘&v_kata’, &v_n);
END;

JENIS-JENIS PROCEDURE PADA ORACLE :


PROCEDURE TANPA PARAMETER/ARGUMEN
Procedure yang tidak memiliki parameter/argument biasanya
bersifat statis (outputannya selalu sama) setiap kali
dieksekusi.

Contoh:

Stored Program 107


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

CREATE OR REPLACE PROCEDURE lihat_mahasiswa


IS
vnama mahasiswa.nama%type;

BEGIN
SELECT nama INTO vnama FROM mahasiswa
WHERE nim = '30108002';
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim
30108002 adalah '||vnama);

END;
/

Hasil setelah dieksekusi adalah sbb,

SQL> EXECUTE lihat_mahasiswa;

Nama mahasiswa dengan nim 30108002 adalah paimen

Procedure lihat_mahasiswa di atas bersifat statis, dieksekusi


kapanpun memiliki output yang sama.

PROCEDURE DENGAN PARAMETER/ARGUMEN


Perbedaan dengan procedure tanpa parameter yaitu
procedure dengan parameter memiliki output yang dinamis
sesuai dengan nilai yang diberi pada parameter procedure
tersebut. Default argumen pada Oracle adalah IN.

Jenis-Jenis parameter/argumen dari Procedure adalah :


Parameter Masukan (Input)
Ditandai dengan atribut IN, dimana nilai dari parameter ini
merupakan inputan untuk sebuah procedure.

Contoh:
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
(vnim IN mahasiswa.nim%type)

Stored Program 108


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

IS
vnama mahasiswa.nama%type;

BEGIN
SELECT nama INTO vnama FROM mahasiswa
WHERE nim = vnim;
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim
'||vnim||' adalah '||vnama);

END;
/

Parameter Keluaran (Output)


Ditandai dengan atribut OUT, dimana parameter ini
merupakan variabel penampung untuk output sebuah
procedure.

Contoh:

Procedure yang menggunakan parameter masukan dan juga


parameter keluaran adalah sebagai berikut :
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
(vnim IN mahasiswa.nim%type,
vnama OUT mahasiswa.nama%type)

IS
BEGIN
SELECT nama INTO vnama FROM mahasiswa
WHERE nim = vnim;
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim
'||vnim||' adalah '||vnama);

END;
/

Stored Program 109


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Untuk mengeksekusi procedure lihat_mahasiswa :

SQL> SET SERVEROUTPUT ON;


SQL> DECLARE
2 vnama mahasiswa.nama%type;
3 BEGIN
4 lihat_mahasiswa ('30108002',vnama);
5 DBMS_OUTPUT.PUT_LINE('Nama mahasiswa teladan
bulan ini adalah '||vnama);
6 END;
7 /
Nama mahasiswa teladan bulan ini adalah paimen

Parameter Masukan/Keluaran (Input/Output)


Ditandai atribut IN OUT, dimana parameter tersebut dianggap
sebagai masukan kemudian diproses dan ditampilkan kembali
sebagai keluaran.

Contoh:
CREATE OR REPLACE PROCEDURE kuadrat
(x IN OUT number)

IS
BEGIN
x:=x*x;

END;
/

Stored Program 110


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Untuk mengeksekusi procedure kuadrat :

SQL> SET VERIFY OFF;


SQL> DECLARE
2 bil number := '&input_angka';
3 n number;
4 BEGIN
5 n := bil;
6 kuadrat(bil);
7 DBMS_OUTPUT.PUT_LINE('kuadrat dari '||n||' adalah '||
bil);
8 END;
9 /
Enter value for input_angka : 5
kuadrat dari 5 adalah 25

Function
Perbedaan mendasar antara function dan procedure adalah
bahwa function harus mengembalikan nilai tertentu kepada
pemanggilnya. Nilai ini dikembalikan dengan menggunakan
sintaks RETURN.

Stored Program 111


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Non Nested Function


Disebut juga stored function yang mirip dengan stored
procedure tetapi harus memberikak output sebuah nilai.
Function ini tersimpan dalam basis data.

Sintaks:
CREATE [OR REPLACE] FUNCTION nama_function
[(argumen [IN|OUT|IN OUT] tipe_data,
argumen [IN|OUT|IN OUT]tipe_data,
...)]
RETURN tipe_data {IS|AS}
[deklarasi variabel lokal]

BEGIN
badan fungsi
END;

RETURN adalah nilai yang dikembalikan oleh function. Jika


terdapat RETURN dalam badan fungsi, maka itu berfungsi
untuk mengembalikan kontrol kepada pemanggil fungsi
bersama nilai yang dikembalikan fungsi.

Sintaks:
RETURN ekspresi;

Dalam satu fungsi dimungkinkan penggunaan RETURN yang


lebih dari satu tetapi bila di dalam badan fungsi tidak terdapat
pernyataan RETURN maka akan terjadi error.

Contoh:
CREATE OR REPLACE FUNCTION tambah
(n1 number, n2 number)
RETURN number IS

BEGIN
return (n1+n2);

Stored Program 112


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

END;

Cara mengeksekusi :
SQL > select tambah (1,8) from dual;

tambah (1,8)
-----------
9

Contoh :
CREATE OR REPLACE FUNCTION cariMahasiswa
(vnim mahasiswa.nim%type)
RETURN number IS
v_nim mahasiswa.nim%type;

BEGIN
SELECT nim FROM mahasiswa WHERE nim = vnim;
IF SQL%FOUND THEN
RETURN 1;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 0;

END cariPegawai;

Contoh pemanggilan fungsi:

Stored Program 113


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

declare
begin
IF(cariMahasiswa('30108002') = 1) THEN;
dbms_output.put_line('mahasiswa terdaftar');
ELSE
dbms_output.put_line('mahasiswa tidak
terdaftar');
END IF;
end;

Untuk meng-compile ulang sebuah function digunakan sintaks


berikut
ALTER FUNCTION nama_fungsi COMPILE;

Sedangkan untuk menghapus funsi digunakan sintaks berikut


DROP FUNCTION nama_fungsi;

Nested Function

Seperti nested procedure, fungsi ini adalah fungsi yang


dideklarasikan dalam suatu blok PL/SQL, tidak tersimpan
dalam basis data dana hanya bisa dipanggil oleh blok
dimana fungsi dideklarasikan.

Contoh:
DECLARE
jum number;
FUNCTION tambah(n1 number, n2 number)
RETURN number IS
BEGIN
RETURN(n1+n2);
END tambah;
BEGIN

Stored Program 114


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

jum:=tambah(2,3);
dbms_output.put_line('Hasil penjumlahan antara
2 dan 3 adalah '||TO_CHAR(jum));
END;

JENIS-JENIS FUNCTION :

1. FUNCTION TANPA PARAMETER


Function ini tidak memiliki parameter/argumen biasanya
bersifat statis setiap kali dieksekusi.
Contoh :
DECLARE

FUNCTION jumMahasiswa
RETURN number IS
jum number;
BEGIN
select count(nim) into jum from
mahasiswa;
RETURN(jum);
END jumMahasiswa;
BEGIN
dbms_output.put_line('Jumlah mahasiswa saat
ini adalah '||TO_CHAR(jumMahasiswa));
END;

2. FUNCTION BER-PARAMETER
Sama seperti Procedure berparameter, Function ber-
parameter memiliki outputan yang dinamis sesuai dengan
nilai yang diassign ke parameter pada function tersebut.
Adapun parameter yang dimaksud disini adalah :

a. Parameter masukan
Contoh :
CREATE OR REPLACE FUNCTION

Stored Program 115


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

luas_persegi_panjang
(p number,l number)
RETURN number
IS

BEGIN
RETURN (p*l);
END;

Salah satu cara untuk mengeksekusinya dengan


menggunakan klausa SELECT sepertidi bawah ini :

SQL> SELECT luas_persegi_panjang (8,3) FROM dual;

LUAS_PERSEGI_PANJANG(8,3)
------------------------------------------
24

b. Parameter keluaran
Contoh :
CREATE OR REPLACE FUNCTION volume_tabung
(r IN number, t IN number,luas OUT number)
RETURN number IS
pi number:=3.14;
vol number;

BEGIN
luas:=pi*r*r;
return (luas*t);
END;

Misal digunakan blok PL/SQL untuk menjalankan fungsi


diatas :
declare
L_alas number;
Stored Program 116
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

begin
dbms_output.put_line('Volume tabung paijo
adalah '||volume_tabung(2,5,L_alas));
dbms_output.put_line('Luas alas lingkaran
pada tabung paijo adalah '||L_alas);
end;

Output :

Volume tabung paijo adalah 62.8


Luas alas lingkaran pada tabung paijo adalah 12.56

Contoh di atas menunjukan bahwa function dapat


mengembalikan lebih dari satu nilai lewat parameter
OUT.

c. Parameter masukan/keluaran
Contoh :

CREATE OR REPLACE FUNCTION volume_tabung_ku


(x IN OUT number, t IN number)
RETURN number IS
pi number:=3.14;
vol number;

BEGIN
x:=pi*x*x;
vol:= x*t;
return (vol);
END;

digunakan blok PL/SQL berikut untuk menjalankan


fungsi diatas :
declare
y number:='&jari_alas';
Stored Program 117
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

begin
dbms_output.put_line('Volume tabung paimen
adalah '||volume_tabung2(y,5));
dbms_output.put_line('Luas alas lingkaran
tabung paimen adalah '||y);
end;

Output :

Enter value for jari_alas: 2


old 2: L number:='&jari_alas';
new 2: L number:='2';
Volume tabung paimen adalah 62.8
Luas alas lingkaran tabung paimen adalah 12.56

1. Buat sebuah procedure untuk melakukan enkripsi


sebuah string yang diinputkan oleh user. jika string
yang dihasilkan tetap sama maka keluarkan perintah
gagal enkripsi.

contoh :
SQL> execute enkripsi('oh semoga nilaiku
bagus');
======================
enkripsi berhasil
======================
string sebelum enkripsi : oh semoga nilaiku
bagus
string sesudah enkripsi : 0h s3m0g4 n1l41ku
b4gus

PL/SQL procedure successfully completed.

Stored Program 118


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> execute enkripsi('kyt kmnwxz zzbfr');


======================
enkripsi gagal
======================

PL/SQL procedure successfully completed.

2. Buatlah fungsi untuk menghasilkan nilai biner dari


suatu angka desimal. Tuliskan juga cara
mengeksekusinya.

Contoh:
SQL> select biner(10) from dual;

BINER(10)

3. Jelaskan maksud dari procedure dibawah ini

PROCEDURE calc_bonus (emp_id IN INTEGER, bonus OUT


REAL) IS
hire_date DATE;
bonus_missing EXCEPTION;
BEGIN
SELECT sal * 0.10, hiredate INTO bonus, hire_date
FROM emp
WHERE empno = emp_id;
IF bonus IS NULL THEN
RAISE bonus_missing;
END IF;
IF MONTHS_BETWEEN(SYSDATE, hire_date) > 60 THEN
bonus := bonus + 500;

Stored Program 119


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

END IF;
...
EXCEPTION
WHEN bonus_missing THEN
...
END calc_bonus;

4. Jalankanlah Package di bawah ini !

CREATE OR REPLACE PACKAGE lihat IS


function is_kartu(id
pembayaran.id_pembayaran%type)
return number;
procedure all_kartu;
END;

create or replace package body lihat is


function is_kartu(id
pembayaran.id_pembayaran%type)
return number is
kartu pembayaran.pembayaran_kartu
%type;
tunai pembayaran.pembayaran_tunai
%type;
begin
select
pembayaran.pembayaran_kartu,
pembayaran.pembayaran_tunai
into kartu, tunai
from pembayaran
where
id=pembayaran.id_pembayaran;

if kartu>=tunai then return


(1);
else return (0);
end if;
end;

Stored Program 120


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

procedure all_kartu is
cursor c_pembayaran is
select *
from pembayaran
where is_kartu
(pembayaran.id_pembayaran)=1
;
nama pemesan.nama_pemesan
%type;
id pembayaran.id_pembayaran
%type;
begin
dbms_output.put_line
('--------------------
----------------------
----------------------
--');
for x in c_pembayaran
loop
id:=x.id_reservasi;
select c.nama_pemesan
into nama
from reservasi b,
pemesan c
where
id=b.id_reservasi and
b.id_pemesan=c.id_peme
san;
dbms_output.put_line
(c_pembayaran
%rowcount||'. '||
x.id_pembayaran||'
pada tanggal '||
x.tgl_pembayaran||'
oleh '||nama);
end loop;
end;
end;

EXECUTE lihat.all_kartu;

Stored Program 121


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Apa output dari package tersebut dan


Analisalah package tersebut !!

Stored Program 122


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

8 TRIGGER

Overview

Salah satu masalah dalam database adalah integritas


bagaimana menjaga data agar tetap konsisten. Hal ini bisa
ditangani dengan trigger yang menyerupai fungsi atau
procedure yang dijalankan secara otomatis sebagai pemicu
dari sebuah kondisi.

Tujuan

1. Praktikan mengetahui dan mengerti trigger dalam


Oracle.
2. Praktikan mengerti manfaat dan batsan penggunaan
trigger.
3. Praktikan Mampu mengimplementasikan trigger dalam
oracle.

Trigger 123
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Definisi

Merupakan blok PL/SQL yang memiliki fungsi hampir sama


dengan procedure maupun function , hanya saja, jika
procedure atau function dijalankan secara eksplisit lewat
pemanggilan procedure atau function tersebut, sedangkan
untuk trigger, dijalankan secara implisit melalui perintah
insert, delete atau update.

Manfaat

Manfaat trigger:
 Mengatur integritas dari constraint yang kompleks
yang tidak mungkin ditangani oleh sintaks-sintaks
pembuatan tabel.
 Mencegah transaksi yang tidak valid
 Memperbaiki keamanan database dengan
menyediakan audit yang lebih kompleks mengenai
informasi perubahan database dan user siapa yang
melakukan perubahan.
 Secara otomatis memberi sinyal program lain untuk
melakukan sesuatu jika isi tabel diubah.

Batasan

Trigger mempunyai batasan


 Tidak dapat menggunakan perintah commit dan
rollback, selain itu juga tidak dapat memanggil procedure,
function atau package yang menggunakan perintah
commit dan rollback.
 Tidak dapat diimplementasikan pada kolom pada suatu
tabel yang memilki constraint, jika pada akhirnya akan
menyebabkan pelanggaran constraint. Biasanya terjadi
akibat modifikasi pada primary key

Trigger 124
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Struktur Dasar Trigger

SINTAKS
CREATE [or replace] TRIGGER nama_trigger
( BEFORE|AFTER )
( INSERT|UPDATE [OF nama_kolom,..]|DELETE )ON
nama_tabel
[FOR EACH ROW]
[WHEN (kondisi)]

DECLARE
Deklarasi tipe data
BEGIN
Trigger body
END;

Contoh:

Create or replace trigger bef_upd_row_keuangan


before  Trigger Timing
update of donasi on keuangan  Trigger Event
for each row  Trigger Type
when (new.donasi => 0)  Trigger
Restriction

begin Trigger
dbms_output.put('Donasi terbaru:'||:new.donasi); Trigger
body
body
end;
/

Trigger 125
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Triggering Statement :

Update keuangan
set donasi=10000000
where nim=‘30108001’

Bagian Trigger Keterangan Nilai yang


mungkin
Trigger timing Menunjukkan kapan BEFORE
trigger akan AFER
dieksekusi INSTEAD OF
relatif terhadap
suatu event.
Trigger event Jenis manipulasi INSERT
data pada UPDATE
tabel/view yang DELETE
menyebabkan CREATE
trigger terpacu. ALTER
DROP
STARTUP
SHUTDOWN
LOGOFF
LOGON
SERVERERROR
SUSPEND

Trigger Batasan yang When (boolean
restriction mengizinkan value)
(optional) pengeksekusian
trigger.
Trigger type Berapa kali body ROW-level
trigger STATEMENT-level
dieksekusi.
Trigger body Berisi algoritma Blok PL/SQL
aksi yang akan
dilakukan.

Trigger 126
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Nama trigger sebaiknya dengan jelas mencerminkan table


yang diaplikasikan, Perintah DML Trigger, status before/after,
dan apakah row level atau statement level. Misalnya trigger
BEFORE UPDATE dengan row level pada table KARYAWAN
dapat diberi nama bef_upd_row_karyawan.

Triggering statement adalah statement/perintah yang


menyebabkan trigger tereksekusi.

Jenis-jenis Trigger

1. Row-level dan Statement-level Trigger

Ketika membuat sebuah trigger, kita dapat menentukan


berapa kali aksi trigger di dalamnya dieksekusi:
 Row-level trigger dieksekusi untuk setiap row yang
dimanipulasi pada suatu transaksi. Dengan kata lain,
row-level trigger mengerjakan trigger action satu kali
untuk setiap row yang dimanipulasi. Penerapan trigger
ini ditunjukkan oleh adanya klausa FOR EACH ROW.
Row-level trigger berguna jika kode dalam trigger body
bergantung pada setiap baris yang terpengaruh oleh
triggering statement.

 Statement-level trigger dieksekusi satu kali pada


saat transaksi, tanpa memperhatikan jumlah row yang
terlibat. Misalnya, jika terdapat suatu transaksi yang
memasukkan 1000 baris ke dalam tabel, maka
statement-level trigger hanya akan dieksekusi sekali
saja. Statement-level trigger berguna jika kode dalam
trigger body tidak bergantung pada baris yang
terpengaruh oleh triggering statement. Secara default
trigger yang dibuat adalah statement-level trigger.

2. Before and After Trigger

Dalam pembuatan sebuah trigger kita dapat menentukan


trigger timing yaitu apakah trigger body akan dieksekusi
sebelum atau sesudah triggering statement dieksekusi.
Trigger 127
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Before trigger menjalankan trigger body sebelum event


atau triggering statement. Oleh karena itu, trigger ini
cocok digunakan untuk mendeteksi bagaimana event
boleh dilanjutkan maupun tidak. After trigger menjalankan
trigger action setelah event terjadi.

Kita mungkin akan berhubungan dengan data lama (old)


dan data baru (new) yang terjadi dalam transaksi. Dalam
trigger, dikenal istilah alias atau referensi, yaitu sejenis
variabel yang menyimpan nilai dari suatu kolom dalam
tabel. Alias terbagi menjadi dua, yaitu:

Untuk mendapatkan data baru pada sebuah tabel di


dalam trigger body, dapat dilakukan dengan perintah
sebagai berikut:
:new.nama_kolom

Untuk mendapatkan data lama pada sebuah tabel di


dalam trigger body, perintah yang digunakan:
:old.nama_kolom

Referensi nilai kolom di trigger:


 insert (new.nama_kolom)
 update (new.nama_kolom dan old.nama_kolom)
 delete (old.kolom_name)

Before dan After trigger tidak dapat diimplementasikan


pada view.

3. Instead Of Trigger

Instead of trigger hanya akan dieksekusi bagi view dan


diaktivasi jika terjadi perubahan pada base table (tabel
asli). Proses yang akan dilakukan oleh triggering
statement akan digantikan oleh aksi pada trigger body.
Trigger 128
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. System Event & User Event Trigger


Penggunaan trigger dapat dikelompokkan menurut event
yang terjadi:
 System events
a. Database startup & shutdown
b. Server error message events
c. User events
 User logon and logoff
a. DDL statements (CREATE, ALTER, and DROP)
b. DML statements (INSERT, DELETE, and UPDATE)

Contoh 1:

Tabel T_HISTORY apabila ada user yang mengubah data pada


tabel KEUANGAN. Siapa usernya beserta waktu pengubahan
data dan keterangan.
Pertama buat dahulu tabel T_HISTORY dengan sintak dibawah
ini:

SQL> CREATE TABLE T_HISTORY


(NAMA_USER VARCHAR2(9),
WAKTU VARCHAR2(25),
KET VARCHAR2(50));

Table created.

Langkah kedua adalah membuat trigger untuk keperluan di


atas sintaksnya sebagai berikut:

CREATE OR REPLACE TRIGGER HISTORY_KEUANGAN


AFTER INSERT OR DELETE ON KEUANGAN
FOR EACH ROW

BEGIN
INSERT INTO T_HISTORY(NAMA_USER,WAKTU,KET)
VALUES
(USER,
TO_CHAR(SYSDATE,'DD-MON-YYYY HH24:MI:SS'),

Trigger 129
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

'Terjadi perubahan'
);
dbms_output.put('TERJADI PENGUBAHAN PADA TABEL
KEUANGAN');
END;

Kemudian lakukan pengujian pada trigger di atas dengan


mengisi data pada tabel keuangan dengan sintaks berikut:
SQL> INSERT INTO KEUANGAN VALUES
('30108001','10000000','lunas');

TERJADI PENGUBAHAN PADA TABEL KEUANGAN

1 row created.

Untuk melihat tabel T_HISTORY, gunakan sintaks berikut:

SQL> select * from T_ HISTORY;

NAMA_USER WAKTU KET


--------- -------------------- ---------------------
PELATIHAN 10-AUG-2003 21:34:45 Terjadi perubahan

contoh 2 :
CREATE OR REPLACE TRIGGER BEF_UPD_MAHASISWA
BEFORE UPDATE OF NAMA ON MAHASISWA
FOR EACH ROW

DECLARE
VNAMA_BARU MAHASISWA.NAMA%TYPE;
VNAMA_LAMA MAHASISWA.NAMA%TYPE;

BEGIN
VNAMA_BARU:= :NEW.NAMA;

Trigger 130
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

VNAMA_LAMA:= :OLD.NAMA;
DBMS_OUTPUT.PUT_LINE(‘TELAH DIUPDATE’);
DBMS_OUTPUT.PUT_LINE(‘NIM MAHASISWA : ‘||:OLD.NIM);
DBMS_OUTPUT.PUT_LINE(‘NAMA MAHASISWA LAMA : ’||
VNAMA_LAMA);
DBMS_OUTPUT.PUT_LINE(‘NAMA MAHASISWA BARU : ’||
VNAMA_BARU);
END;

Contoh 3 :
misal terdapat tabel STATUS_MHS untuk menyimpan status
apakah donasi mahasiswa telah dilunasi
CREATE OR REPLACE TRIGGER AFT_INS_KEUANGAN
AFTER INSERT ON KEUANGAN
FOR EACH ROW
WHEN (new.donasi > 0)
DECLARE

BEGIN
IF INSERTING THEN
UPDATE STATUS_MHS
SET STATUS = ‘lunas’
WHERE NIM = :new.nim;
END IF;
END;

Trigger 131
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Cascading Trigger

Suatu trigger bisa memicu dijalankannya trigger lain,


sehingga terjadi operasi trigger berantai. Dalam cascading
operation seperti ini, dapat terjadi kesalahan ORA-04091 atau
table is mutating. Hal ini disebabkan karena ada trigger action
yang mencoba melakukan operasi query terhadap tabel yang
sedang dimodifikasi.

Untuk menghindari kesalahan seperti ini, maka trigger harus


dimodifikasi agar tidak melakukan pengaksesan tabel yang
sedang digunakan.
CREATE OR REPLACE TRIGGER aft_del_row_keuangan
AFTER delete ON keuangan
FOR EACH ROW
DECLARE
n number;

BEGIN
select count(distinct(nim)) into n
from keuangan;
dbms_output.put_line(‘jumlah mahasiswa yang
memberi donasi sebanyak ’|| n);
END;

ketika dijalankan perintah berikut

SQL > delete keuangan


Where nim = ‘30108001’

Pasti akan muncul kesalahan bahwa tabel keuangan is


mutating

Trigger 132
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Status Trigger

Untuk mengubah status sebuah trigger dijalankan sintaks


berikut

Sintaks:
ALTER TRIGGER nama_trigger DISABLE | ENABLE;

Keterangan:
DISABLE : untuk menonaktifkan trigger yang sudah
dibuat
ENABLE : untuk mengaktifkan kembali trigger yang
sudah di DISABLE.

Contoh :
Untuk men-disable trigger UPDATE_MAHASISWA, gunakan
sintaks berikut:
ALTER TRIGGER UPDATE_MAHASISWA DISABLE;

Untuk mangaktifkan atau menonaktifkan semua trigger yang


diasosiasikan pada sebuah tabel dapat menggunakan sintaks:
ALTER TABLE nama_tabel
[DISABLE|ENABLE] ALL TRIGGER ;

Sedangkan untuk menghapus trigger digunakan perintah


berikut :

DROP TRIGGER nama_trigger;

Trigger 133
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

JURNAL
1. Jelaskan perbedaan function, procedure, dan package!
2. Buatlah sebuah trigger dimana ketika id_jenis pada
tabel jenis diubah maka id_jenis pada tabel buku ikut
berubah!
3. Buatlah trigger dimana trigger tersebut akan
menjamin nilai stok pada tabel buku berkisar antara 0
sampai 100!
4. Jelaskan maksud trigger dibawah ini:
create trigger ledger_after_ins_row
before insert on LEDGER_AUDIT
for each row
begin
call INSERT_LEDGER_DUP(:new.Action_Date, 
:new.Action, :new.Item,
:new.Quantity, :new.QuantityType, :new.Rate,
:new.Amount, :new.Person);
end;

Trigger 134
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

9 INDEX, VIEW dan SEQUENCE

Overview

Pada Modul ini, akan dipelajari DDL pada index, view, dan
sequence.

Tujuan

22. Dapat membuat index.


23. Dapat membuat view
24. Dapat membuat sequence dengan menggunakan SQL
*Plus

Index, View dan Sequence 135


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

INDEX
Index adalah objek schema yang berisi catatan dari nilai-nilai
yang muncul pada satu kolom atau kombinasi kolom di index
dari sebuah tabel. Index dibuat untuk mempercepat
pengaksesan data pada suatu tabel. Index ini dibuat
berdasarkan pada field – field dari sebuah tabel. Index bisa
dibuat secara otomatis untuk constraint primary key atau
unique key dan secara manual melalui CREATE INDEX
statement.

Membuat Index (CREATE INDEX)

Query :
CREATE INDEX nama_index ON
nama_tabel(nama_field1, nama_field2,….);

Contohnya :
SQL>CREATE INDEX mahasiswa_idx ON
mahasiswa(nim, nama, alamat );

Memodifikasi Index (CREATE INDEX)

Query :
ALTER INDEX nama_index
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage_clause]

Contoh :

SQL > ALTER INDEX mahasiswa_idx INITRANS 10;

Index, View dan Sequence 136


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Mengubah Nama Index

Queri :
ALTER INDEX nama_index_lama RENAME TO nama_index_baru;

contoh :

ALTER INDEX mahasiswa_idx RENAME TO mhs_idx;

Menghapus Index (CREATE INDEX)

Query :
DROP INDEX nama_index;

Contoh :
SQL > DROP INDEX mahasiswa_idx;

Segmen Index
Segmen indeks dibuat ketika indeks diciptakan. Untuk setiap
indeks non-partisi akan terdapat satu segmen indeks sedang
pada indeks terpartisi, setiap partisi memiliki satu segmen
indeks. Pada saat indeks dibuat melalui perintah create index,
proses server melakukan operasi sort nilai data yang diindeks
sebelum berubah menjadi segmen indeks.

Segmen indeks tidak harus berada dalam satu tablespace


yang sama dengan segmen datanya. Script di bawah
membuat tablespace khusus untuk menampung indeks yang
terpisah dengan segmen data.

Index, View dan Sequence 137


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

--MEMBUAT SEGMEN INDEKS


SQL> CREATE TABLESPACE personal_index DATAFILE
2 ‘E:\ORACLE\ORADATA\T3TAN\personal_index.ORA’
3 SIZE 12M REUSE AUTOEXTEND ON
4 NEXT 128K MAXSIZE 100M
5 EXTENT MANAGEMENT LOCAL;

SQL> CREATE INDEX ferry.notes_id


2 ON ferry.notes(A)
3 TABLESPACE personal_index PCTFREE 40 INITRANS
4
4 STORAGE (INITIAL 16384 NEXT 8192 PCTINCREASE
0);

SQL> SET HEADING OFF


SQL>COL hdg FOLD_BEFORE
SQL>SELECT ‘Ukuran bytes : ’ hdg, bytes,
2 ‘Jumlah Blok : ’ hdg, blocks,
3 ‘Jumlah Extents : ’ hdg, extents,
4 ‘Initial Extent : ’ hdg,
initial_extents,
5 ‘Min Extent : ’ hdg, min_extent,
6 ‘Max Extent : ’ hdg, max_extent,
7 ‘Free List : ’ hdg, freelist,
8 ‘Free List Group : ’ hdg, freelist_group,
9 ‘Header File : ’ hdg, header_file,
10 ‘Header Block : ’ hdg, header_block,
11 ‘Tipe Segmen : ’ hdg, tipe_segmen,
12 FROM dba_segments
13 WHERE segment_name=’NOTES_ID’;

Ukuran bytes : 589824


Jumlah Bit : 72
Jumlah Extent : 9
Initial Extent : 16384
Min Extent : 1
Max Extent : 2117483645
Freelist : 1
Freelist Group : 1
Header File : 19
Header Block : 9

Index, View dan Sequence 138


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Tipe Segmen : INDEX

SQL> SET HEADING ON


SQL> SELECT extent_id, block_id, bytes, blocks
2 FROM dba_extents
3 WHERE segment_name= ‘NOTES_ID’

EXTENT_ID LOCK_ID BYTES BLOCKS


0 9 65536 8
1 17 65536 8
2 25 65536 8
3 33 65536 8
4 41 65536 8
5 49 65536 8
6 57 65536 8
7 65 65536 8
8 73 65536 8

Tablespace untuk indeks ditentukan melalui statement


pembuatan indeks dan parameter storage dapat disertakan
untuk menetapkan karakteristik extent dari suatu segmen
indeks. Tampak bahwa indeks pada tabel notes dengan kunci
indeks kolom A mempersiapkan 9 extent dengan total 72 blok
data.

Menentukan Indeks
Developer membuat indeks agar unjuk kerja aplikasi lebih
baik. Perintah create index menghasilkan indeks dengan entry
berupa nilai data yang diperoleh dari suatu kolom tunggal,
gabungan beberapa kolom, ekspresi, dan fungsi.
Ketika bekerja dengan indeks disarankan untuk mengacu
pada kolom-kolom yang diindeks agar meningkatkan
performansi join tabel, buatlah indeks dengan urutan kolom-
kolom tabel yang tepat atau yang sering digunakan pada
klausa where agar indeks digunakan untuk pencarian row.
Pada pembuatan primary dan unique key secara otomatis
akan dihasilkan indeks, begitu juga ketika primary dan unique
key itu dihapus maka indeksnya secara otomatis dihapus.
Untuk menghindari proses pembuatan indeks secara otomatis
itu buatlah terlebih dahulu indeks non-unik berdasarkan

Index, View dan Sequence 139


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

primary key dan unique key. Selain itu buatlah juga indeks
pada foreign key.
Kolom yang dipilih sebagai bagian dari indeks sebaiknya
mengandung nilai data yang unik atau kolom yang sering
digunakan dalam klausa where. Jika perbedaan nilai data dari
suatu atau beberapa kolom sangat bervariasi, gunakan indeks
B-Tree. Sedangkan untuk nilai data yang kurang bervariasi
gunakan bitmap.

Ekspresi Tunggal
Indeks ini menggunakan satu kolom sebagai kunci indeksnya.
Misalnya untuk kemudahan akses data penduduk menurut
nama penduduk dilakukan dengan perintah create index
penduduk on kependudukan(upper(nama)).

Ekspresi Gabungan
Indeks ini dikenal juga sebagai concatenated atau composite
index yaitu indeks yang menggunakan beberapa kolom suatu
tabel untuk membentuk indeks entry. Jumlah kombinasinya
dapat dibuat hingga 32 kolom namun dalam prakteknya
penggunaan lebih dari lima kolom jarang digunakan.
Anggaplah terdapat suatu tabel kependudukan yang terdiri
dari kolom kabupaten, kecamatan, kelurahan, serta beberapa
kolom untuk entitas penduduk. Apabila tabel itu diindeks,
kunci indeksnya bisa berupa create index pddk_ix on
penduduk (kab, kec, kel, nama). Dengan demikian susunan
indeks entrinya diurutkan menurut kabupaten, kecamatan,
kelurahan, dan nama penduduk. Untuk memanfaatkan indeks,
query harus dilakukan dengan memperhatikan susunan
kondisi klausa where, misalnya select * from penduduk where
kab=’PNK’ and kec=’SEL’ and kel=’BANGKA’.

Jenis-jenis Indeks
Untuk performansi query Oracle mendukung penerapan
indeks B-Tree yang merupakan indeks default, indeks bitmap
untuk kumpulan key yang cardinality-nya rendah, indeks pada
cluster B-Tree dan hash, indeks global dan lokal untuk partisi
tabel, indeks reverse key pada aplikasi real application cluster
(RAC), indeks function-based pada key yang berupa ekspresi

Index, View dan Sequence 140


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

atau fungsi, serta indeks domain untuk aplikasi atau


cartridge.

1. Indeks B-Tree
Indeks ini menyimpan key dan rowid pada struktur B-Tree
untuk menangani transaksi dengan intensitas tinggi dan
cocok digunakan pada kolom-kolom tabel dengan cardinality
tinggi atau mengandung nilai data yang sangat beragam.
Ketika transaksi berlangsung, nilai data pada tabel dan pohon
indeks diperbarui. Apabila terjadi query, rowid yang
digunakan untuk menemukan letak row data dalam tabel
dicari pada indeks. Jadi pada indeks ini rowid untuk setiap key
dari masing-masing row tabel akan disimpan dalam indeks.
Perintah create index boy.kar_idx on boy.karyawan (nik) akan
menghasilkan indeks B-Tree dan cocok untuk menangani
transaksi OLTP karena update terhadap kolom yang dindeks
dapat berlangsung secara cepat melalui penerapan
penguncian pada level row.

2. Indeks Bitmap
Berbeda dengan indeks B-Tree yang secara default
menyimpan rowid, indeks bitmap menyimpan suatu bitmap
untuk setiap nilai kunci pada node leaf. Bitmap itu merupakan
pengenal yang disusun oleh sejumlah bit dan dipetakan ke
rowid. Jika bitnya diset, berarti baris dengan sejumlah rowid
yang bersesuaian mengandung nilai key.
Indeks bitmap sangat efektif untuk query yang mengandung
banyak kondisi pada klausa where dengan and dan or karena
operasi itu secara langsung membandingkan bitmap sebelum
mengkonversi bitmap ke rowid. Indeks ini menggunakan
space yang lebih kecil dan cocok untuk hardware dengan
prosesor dan memori yang terbatas. Indeks bitmap cocok
untuk menangani data berukuran besar dengan tingkat
transaksi kecil atau pada lingkungan data warehouse serta
kolom-kolom dengan cardinilty rendah. Namun mungkin saja
DBA membuat indeks bitmap pada kolom dengan cardility
yang tinggi untuk lingkungan data warehouse. Untuk data
warehouse dengan star schema gunakan indeks bitmap join
yang merupakan fungsionalitas baru di Oracle10g. Jika kolom

Index, View dan Sequence 141


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

pada dimension table digunakan untuk membatasi data yang


dipilih dari fact tabel (dengan foreign key) dan n dimension
tabel (dengan primary key), indeks bitmap join bisa
menghindari operasi join antartabel tersebut.
Cardinality rendah merupakan kolom dengan nilai data
berulang atau kolom yang perbedaan nilai datanya sangat
kecil dibandingkan jumlah row-nya. Cardinality dapat dilihat
pada tabel karyawan berikut ini.
NI Nam Kelamin Status Dep
K a t
10 Gog Laki-laki Menikah 02
0 e
10 Titin Perempu Janda 01
1 an
10 Beni Laki-laki Belum 03
2 Menikah
10 Joel Laki-laki Duda 05
3
10 Susa Perempu Menikah 03
4 n an

Kolom kelamin, status, dan memiliki cardinality rendah karena


itu tepat untuk menggunakan indeks bitmap misalnya create
index boy.kar_depix bitmap on boy.karyawan(dept);
sedangkan nik dan nama memiliki cardinality tinggi sehingga
indeks B-Tree dapat diterapkan.

3. Indeks Reverse
Jika dibandingkan dengan indeks B-Tree, indeks reverse key
membalik (reverse) byte setiap kolom yang diindeks (kecuali
rowid) dan mempertahankan urutan kolomnya agar
perubahan dapat disebar pada beberapa block indeks.
Misalnya jika nilai suatu kolom yang diindeks adalah 1234
maka indeks reverse menggunakan angka 4321 agar
pemutakhiran pohon indeks tersebar pada beberapa leaf blok.
Oleh karena itu indeks ini cocok digunakan jika kolom-kolom
yang diindeks memiliki nilai data yang berurutan atau mirip.
Indeks ini digunakan pada real application cluster (RAC) di
mana perubahan indeks dilakukan pada kumpulan blok leaf

Index, View dan Sequence 142


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

yang kecil. Dengan me-reverse key yang diindeks maka


insert akan tersebar pada berbagai leaf suatu pohon indeks.

—MEMBUAT INDEKS REVERSE.

SQL> CREATE INDEX sales_wiltglstok ON


2 sales (wilayah, tgl, stok) COMPRESS REVERSE;

SQL> ALTER INDEX sales_wiltglstok REBUILD;

--Mengubah indeks reverse menjadi noreverse


SQL> ALTER INDEX sales_wiltglstok REBUILD NOREVERSE;

Perintah pertama membuat reverse indeks, sedangkan


perintah kedua melakukan rebuild indeks. Apabila indeks ini
akan diubah ke mode default, gunakan klausa NOREVERSE
untuk menormalkan pola penyimpanan key pada pohon
indeks.
Pencarian data dengan range-scanning tidak dapat diterapkan
pada reverse indeks karena kunci indeks tidak lagi disimpan
secara berdekatan sehingga pengambilan data hanya dapat
dilakukan melalui key yang ditentukan atau full-table scan.

4. Indeks Fungsi
Indeks ini menggunakan fungsi (funtion-based index) untuk
mendefinisikan kunci indeksnya.

—MEMBUAT INDEKS FUNGSI.

SQL> CREATE INDEX nama_ix ON penduduk(UPPER(nama));

Index, View dan Sequence 143


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> CREATE INDEX idx1 ON stat_sales(funcsal);

--Menghasilkan statistic index


SQL> ANALYZE INDEX idx1 VALIDATE STRUCTURE;

Perintah pertama menghasilkan indeks entry dengan


mengkapitalkan nama penduduk melalui fungsi built in upper.
Pada contoh kedua digunakan fungsi PL/SQL. funcsal yang
harus ditentukan deterministic dan parameter inisialisasi
QUERY_REWRITE_ENABLED, QUERY_REWRITE_INTEGRITY
bernilai TRUE dan TRUSTED. Tabel stat_sales itu dapat
dianalisa setelah indeks dibuat dan query harus tidak
memerlukan nilai null.

Menghindari Duplikasi Data


Indeks mengorganisasikan row sehingga kolom-kolom yang
digunakan sebagai kunci indeks menyimpan nilai kolom yang
ditentukan dalam ekspresi indeksnya. Pada indeks dengan
ekspresi tunggal maupun composite di atas, penataan entitas
penduduk memungkinkan adanya indeks entri yang sama.
Agar indeks memelihara keunikan penduduk sehingga tidak
ada duplikasinya, gunakan klausa UNIQUE pada ekspresi
indeksnya. Misalnya create unique index pddk_uq on
penduduk(ktp). Indeks ini memastikan tidak adanya duplikasi
row sehingga bisa menjadi kandidat untuk primary key.

Keputusan Rebuild Indeks


Pemeliharaan indeks untuk membuat ulang (rebuild) indeks
dilakukan melalui perintah alter index…rebuild. Jika terjadi
korupasi indeks, mungkin saja rebuild indeks tidak berhasil
karena masih ada korupsi indeks setelah proses rebuild. Untuk
kasus ini, drop index kemudian create index yang dihapus
tersebut.
Jika operasi DML sering dikerjakan, indeks suatu tabel
mungkin tidak tersebar secara merata pada pohon indeks.

Index, View dan Sequence 144


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Oleh karena itu perlu pengecekan untuk menentukan


bilamana indeks perlu direbuild.

—MEMERIKSA BRANCH LEVEL INDEKS B-TREE.

--Ambil statistik indeks


SQL> ANALYZE INDEX tes_idx_idx COMPUTE STATISTICS;
Index Analyzed

--Cek BLevel
SQL> SELECT index_name, blevel, DECODE(blevel,0,’OK
BLEVEL’, 1,’OK BLEVEL’, 2,’OK BLEVEL’, 3,’OK BLEVEL’,
4,’OK BLEVEL’,’BLEVEL HIGH’) keterangan
FROM dba_indexes
WHERE owner=’BOY’ ORDER BY bleave;
INDEX_NAME BLEVEL KETERANGAN
BUDVERPORT_ORG_FK_I 0 OK BLEVEL
SKS_C006134 0 OK BLEVEL
BUDVERPORT_BUDVERIORT2_UK 1 OK BLEVEL
BUDVERPORT_PL_TITLE_FK_I 1 OK BLEVEL
BUDVERPORT_BV_FK_I 2 OK BLEVEL
BUDVERPORT_DIRCTE_FK_I 3 OK BLEVEL
S_WAREHOUSE_ID_FK 4 OK BLEVEL
TES_IDX_IDX 5 BLEVEL HIGH
A1_PP BLEVEL HIGH
A1_UK BLEVEL HIGH
S_ITEM_ORDID_ PRODID_UK BLEVEL HIGH

BLEVEL pada data dictionary DBA_INDEXES adalah B-Tree


level atau branch level yang menunjukkan kedalaman atau
level indeks dari node root. Level nol menunjukkan node root
dan node leaf yang sama. Jika nilai blevel lebih dari empat
maka direkomendasikan untuk me-rebuild indeks. Nilai blevel
diperoleh setelah indeks dianalisa sehingga nilai blevel yang
kosong atau keterangan BLEVEL HIGH menunjukkan indeks
yang belum dianalisa. Untuk itu indeks tes_idx_idx dengan
blevel 5 perlu di-rebuild dengan perintah alter index
tes_idx_idx rebuild.

Index, View dan Sequence 145


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Rebuild Indeks Online


Oracle10g index nama_idx remendukung rebuild indeks dan
pembuatan statistiknya secara online dengan perintah alter
index nama_idx rebuild compute statistics online. Pada versi
terdahulu proses itu melibatkan statement alter index
nama_idx rebuild online dan alter index nama_idx rebuild
compute statistics. Mulai Oracle10g, proses tadi dapat
dilakukan pada indeks reverse key, function-based maupun
indeks reguler dan IOT.
Peningkatan itu memungkinkan user untuk tetap mengakses
indeks sementara rebuild dan statistik indeks dibuat. Opsi
online memperbolehkan operasi DML pada tabel atau partisi
berlangsung sementara pembuatan indeks dan statistik
dikerjakan. Setelah rebuild selesai, indeks yang lama di-drop.
Jika opsi online tidak disertakan maka tabel akan dikunci
hingga proses rebuild indeks berakhir. Jika digunakan opsi
online nologging maka informasi redo tidak dihasilkan.

Keputusan Mengubah Indeks


Perbedaan nilai data kolom (cardinality) yang diindeks juga
dapat menjadi acuan untuk keputusan me-rebuild indeks atau
mengubah jenis indeks.
—CARDINALITY INDEKS.

SQL> ANALYZE INDEX boy.tes_idx_idx VALIDATE STRUCTURE;


Index Analyzed

SQL> SELECT del_lf_rows *100/


2 DECODE(lf_rows, 0,1,lf_rows)
PCT_DELETED,
3 (lf_rows – distinct keys) *100/
4 DECODE(lf_rows,0,1, lf_rows) DISTINCTIVENESS
5 FROM index_stats
6 WHERE NAME=’&index_name’;
Enter value for index_name: TES_IDX_IDX
Old 6: WHERE NAME=’&index_name’
New 6: WHERE NAME=’TES_IDX_IDX’

Index, View dan Sequence 146


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

PCT_DELETED DISTINCTIVENESS
----------- ---------------
16.7724777 910.9142073

Kolom pct_deleted menunjukkan persentase leaf (index entry)


yang telah dihapus dan masih belum diisi. Semakin banyak
persentasenya , pohon indeks menjadi tidak balance. Sebagai
acuan jika pct_deleted bernilai di atas 20 persen, indeks itu
perlu di-rebuild. Namun angka di atas 10 persen juga dapat
dijadikan dasar untuk me-rebuild indeks lebih sering.
Kolom distictiveness menunjukkan seberapa sering suatu nilai
kolom yang diindeks berulang. Misalnya jika suatu tabel
memiliki 10000 row dan ada 9000 variasi nilai untuk kolom
yang diindeks maka berdasarkan formula script di atas
diperoleh hasil 10. Angka ini menunjukkan distribusi yang baik
untuk indeks. Jika untuk 10000 row hanya terdapat variasi
dua nilai data maka diperoleh hasil 99,98. Ini berarti hanya
sedikit variasi nilai data terhadap seluruh yang ada pada
kolom yang diindeks. Kolom ini bukan merupakan calon untuk
proses rebuild indeks tetapi sebaiknya dibuatkan indeks
bitmap.

Sumber informasi
Keberadaan indeks dapat diketahui dengan mengakses data
dictionary DBA_IND_CLOUMNS berikut ini:
--MENGAMBIL INFORMASIINDEKS.

SQL> SELECT index_name, index_type, status


2 FROM dba_indexes
3 WHERE owner=’BOY’;

INDEX_NAME INDEX_TYPE STATUS


------------------------------------------------
PEG_DEP_REVERSE NORMAL/REV VALID
KAR_DEP_BITMAP BITMAP VALID
KOTA_PENDUDUK_NDX CLUSTER VALID
NAMA_IX FUNTION-BASED NORMAL VALID

Index, View dan Sequence 147


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

PK_PELATIHAN IOT-TOP VALID


PROD_IDX NORMAL N/A
SYS_C002976 NORMAL VALID
SYS_I00000033455C00002$$ LOB VALID
TES_IDX_IDX NORMAL VALID

SQL>SELECT index_name, table_name, column_name


2 FROM dba_ind_columns
3 WHERE index_owner=’BOY’
4 ORDER BY table_name;

INDEX_NAME TABLE_NAME COLUMN_NAME


---------------------------------------------------
SYS_C002985 DAFKURSUS SYS_NC0000600007$
SYS_C002986 DAFKURSUS SYS_NC_OID$
SYS_IOT_TOP_33369 EMPSUS_TAB NESTED_TABLE_ID
SYS_IOT_TOP_33369 EMPSUS_TAB NO
PEG_DEP_REVERSE PEGAWAI DEPT_NO
KAR_DEP_BITMAP KARYAWAN DEPT_NO
SYS_C003094 PRODUKSI_RANGE NIK
PROD_IDX PRODUKSI_RANGE TGL
TED_IDX_IDX TES_IDX A1

SQL>SELECT o.object name


2 FROM sys.dba_objects o
3 WHERE owner = ‘BOY’ AND o.object_id
4 IN (SELECT i.obj# FROM sys.ind$ I WHERE
5 BITAND(i.property,4)=4);

OBJECT_NAME
-----------------------------------------------------
PEG_DEP_REVERSE

Partisi Indeks
Seperti halnya table, indeks dapat juga dipartisi. Table
terpartisi dapat menggunakan indeks terpatisi maupun indeks
non-partisi. Demikian pula sebaliknya suatu table non-partisi
dapat menggunakan indeks terpartisi maupun indeks non-
partisi.

Index, View dan Sequence 148


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Indeks Global
Indeks global dapat dipartisi secara range dan cocok
digunakan untuk mengakses row secara OLTP. Pada partisi
indeks global terdapat batas partisi misalnya maxvalue.
Penambahan partisi pada indeks global tidak bisa dilakukan
karena partisi tertinggi telah dibatasi dengan maxvalue.
Untuk tujuan itu, partisi harus dibagi melalui statement alter
index…split partition.
—MEMBUAT INDEKS GLOBAL.

SQL> CREATE INDEX prod_idx ON produksi_range(tgl)


2 GLOBAL PARTITION BY RANGE(tgl)
3 (PARTITION prod1_idx VALUES LESS THAN(
4 TO_DATE(’01-11-2003’,’DD-MM-YYYY’)),
5 PARTITION prod2_idx VALUES LESS THAN
(MAXVALUE));
Index created
Setiap partisi indeks itu diberi nama dan disimpan pada
tablespace indeks
default. Agar pemutakhiran indeks global selalu dilakukan,
sertakan klausa update global indexes pada setiap statement
yang melibatkan operasi DDl pada partisi.

Indeks Lokal
Partisi indeks local umumnya digunakan pada lingkungan data
warehouse atau decision support system (DSS) dimana setiap
partisi table berhubungan dengan satu partisi indeks local.
Untuk lingkungan OLTP dapat digunakan indeks local yang
unik dengan ketentuan bahwa partition key suatu table harus
merupakan kunci bagi indeks tersebut.
Suatu partisi indeks local bersifat independen sehingga status
unusable suatu indeks local tidak mempengaruhi status
indeks local lainnya. Penambahan partisi pada indeks local
tidak bisa dibuat secara eksplisit tetapi dihasilkan ketika suatu
partisi baru ditambahkan. Demikian pula sebalikny, drop
partisi dari indeks local hanya dapat dilakukan ketika partisi
tablenya di-drop. Indeks local dibentuk menurut struktur table
dasarnya dan bersifat equipartitioned sehingga indeks local

Index, View dan Sequence 149


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

dipartisi menurut kolom yang sama dengan table dasarnya


dan menggunakan jumlah partisi atau subpartisi yang sama
pula.

Mengidentifikasi Indeks Unused


Indeks mempercepat pembacaan data dengan mengambil
rowid dari phon indeks untuk selanjutnya mengambil data di
table. Jika pada table terjadi perubahan data dari kolom yang
diindeks maka pohon indeks harus dimutakhirkan. Suatu table
dapat memiliki beberapa indeks dan mungkin saja dari sekian
indeks itu terdapat indeks yang sebenarnya tidak digunakan.
Oracle10g dapat mendeteksi bilamana suatu indeks sedang
digunakan atau tidak diperlukan berdasarkan waktu yang
digunakan. Indeks yang tidak digunakan harus di-drop karena
menambah overhead. Untuk mengamati indeks gunakan
perintah alter indeks nama_indeks monitoring usage. Setelah
anda yakin bahwa dalam selang waktu tertentu operasi yang
melibatkan indeks pasti sudah dilakukan, hentikan
pemantauan indeks dengan alter indeks nama_indeks
nomonitoring usage.

—MEMANTAU INDEKS UNUSED.

--Buat table
SQL> CREATE TABLE kanwil (kode NUMBER(5), nama VARCHAR2(10));
SQL> INSERT INTO kanwil VALUES (1,’KANWIL I’);
SQL> INSERT INTO kanwil VALUES (2,’KANWIL II’);
SQL> INSERT INTO kanwil VALUES (3,’KANWIL III’);
SQL> INSERT INTO kanwil VALUES (4,’KANWIL IV’);
SQL> COMMIT;

--Buat indeks primary key


SQL> ALTER TABLE kanwil ADD(
2 CONSTRAINT kanwil_pk PRIMARY KEY (kode));
Table altered.
--Monitoring indeks belum bekerja
SQL> SELECT index_name, monitoring, used,
2 start_monitoring, end_monitoring

Index, View dan Sequence 150


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3 FROM v$object_usage;
No row selected
--Aktifkan monitoring indeks
SQL> ALTER INDEX kanwil_pk MONITORING USAGE;
Index altered.
--Monitoring indeks diaktifkan
SQL> SELECT index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 FROM v$object_usage;
INDEX_NAME MONITORING USED START_MONITORING END_MO
----------- ------------ ------ ------------------ ------
KANWIL_PK YES NO 01/31/2004 01:30:16
--Buat table PLAN_TABLE jika belum ada.
SQL> @D:\ora9i\rdbms\admin\ut1xplan.sql
--Tracing rencana eksekusi
SQL> SET AUTOTRACE ON EXPLAIN
SQL> SELECT * FROM kanwil WHERE kode =1;
KODE NAMA
---------- ------------
1 KANWIL I
Execution Plan
------------------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (BY INDEX ROWID) OF ‘KANWIL’
2 1 INDEX (UNIQUE SCAN) OF ‘KANWIL_PK’ (UNIQUE)
SQL> SET AUTOT OFF
--Jalankan query
SQL> SELECT * FROM kanwil WHERE kode =1;
SQL> SELECT index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 FROM v$object t_usage;
INDEX_NAME MONITORING USED START_MONITORING END_MO
----------- ------------ ------ ------------------ ------
KANWIL_PK YES YES 01/31/2004 01:45:47
--Akhiri monitoring indeks
SQL> ALTER INDEX kanwil_pk NOMONITORING USAGE;
Indes altered.
SQL> SELECT index_name, monitoring, used,
2 start_monitoring, end_monitoring
3 FROM v$object_usage;
INDEX_NAME MONITORING USED START_MONITORING END_MO
----------- ------------ ------ ------------------ ------
KANWIL_PK NO YES 01/31/2004 01:45:47
01:47:07

Index, View dan Sequence 151


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

View dictionary V$OBJECT_USAGE berisi informasi indeks yang


dimonitor untuk mengetahui indeks yang telah digunakan.
Jika kolom used bernilai yes maka indeks pernah digunakan
selama selang waktu tertentu berdasarkan kolom
start_monitoring dan end_monitoring. Kolom monitoring
bernilai yes jika monitoring indeks sedang berlangsung dan
berakhir setelah perintah monitor menghentikan monitor
indeks dijalankan.

Untuk memantau indeks dalam ruang lingkup database maka


perintah alter index…monitoring usage harus dilakukan bagi
setiap nama indeks. Untuk itu perlu dibuat script yang
menghasilkan statement tersebut dengan membaca data
dictionary DBA_INDEXES baik script untuk memulai maupun
menghentikan monitoring indeks.

—MEMERIKSA INDEKS UNUSED SCOPE DATABASE.

--Buat file script untuk start monitor indeks


SQL> SPOOL D:\STARTMONITOR.SQL
SQL> SELECT ’ALTER INDEX ||OWNER||
2 ‘.’||INDEX_NAME||’MONITORING USAGE;’
3 FROM DBA INDEXES
4 WHERE OWNER NOT IN (‘SYS’,’SYSTEM’);
SQL> SPOOL D:\STOPMONITOR.SQL
SQL> SELECT ’ALTER INDEX ||OWNER||
2 ‘.’||INDEX_NAME||’NOMONITORING USAGE;’
3 FROM DBA INDEXES
4 WHERE OWNER NOT IN (‘SYS’,’SYSTEM’);
SQL> SPOOL OFF
--Edit file startmonitor.sql seperlunya
--dan jalankan monitor
SQL> @D:\startmonitor
--Edit file stopmonitor.sql seperlunya
--dan hentikan monitoring indeks setelah periode tertentu
SQL> @D:\stopmonitor
--Periksa index yg tidak pernah digunakan selama periode
SQL> SELECT d.owner, v.index_name

Index, View dan Sequence 152


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2 FROM dba_indexes d, v$object_usage v


3 WHERE v.used=’NO AND d.index_name=v.index_name;

Setelah pemantauan berakhir query dictionaru DBA_INDEXES


dan V$OBEJCT_USAGE untuk mengetahui nama indeks yang tidak
pernah digunakan melalui kolom unused dan view
V$OBEJCT_USAGE.

VIEW
View adalah sebuah virtual tabel yang dibangun dari satu
atau beberapa tabel yang sudah ada, baik berdasarkan
kondisi tertentu ataupun tidak. Secara fisik view tidak
menyimpan record seperti pada tabel, tetapi ia menyimpan
data berupa pointer yang menunjukkan ke record yang
bersangkutan di dalam tabel.

Sumber data view dapat berasal dari table atau view lain.
Mirip dengan table, Anda dapat melakukan update, delete,
dan insert pada view sehingga perubahan itu akan
direfleksikan pada base tabelnya. Berbeda dengan table, view
tidak menyimpan data, view hanya menyimpan definisi query
pada data dictionary dan tidak memerlukan ruang
penyimpanan data. Penerapan view dapat diaplikasikan pada
situasi berikut :
 Membatasi akses sesuai otoritas user
 Memudahkan pemahaman tehadap kolom penampung
data yang mungkin berbeda dengan definisi kolom
pada table dasar
 Menyederhanakan pandangan user terhadap data
 Menangani data kompleks
 Memudahkan penggunaan quey yang berulang karena
disimpan sebagai stored query

Membuat View (CREATE VIEW)

Index, View dan Sequence 153


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Query :
CREATE [or replace] [force] [noforce] VIEW nama_view
[(nama_field1, …)]
AS subquery [with check option]

or replace : mendefinisikan kembali view yang


sudah ada
noforce : view hanya akan dibuat jika tabel
induk telah dibuat.
force : view dapat dibuat walau tabel induk
belum dibuat.
with check option : view akan menvalidasi data yang
diinsert atau diupdate ke view

Contoh :
SQL > CREATE or REPLACE VIEW mahasiswa_view (nim,
nama, alamat)
AS
SELECT nim, nama, alamat
FROM mahasiswa
WHERE alamat != ‘’ with check option;

Memodifikasi View (ALTER VIEW)


Alter view digunakan untuk mengkompilasi ulang sebuah
view.

Query :
ALTER VIEW nama_view COMPILE;

Contoh :
SQL > ALTER VIEW mahasiswa_view COMPILE:

Index, View dan Sequence 154


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Menghapus View (DROP VIEW)


Query :
DROP VIEW nama_view;

Contoh :
SQL > DROP VIEW mahasiswa_view;

View Read-Only
View yang ditujukan hanya untuk dibaca saja, dibuat dengan
menyertakan klausa with read only. Sebagai gambarannya,
berikut ini didefinisikan objek table dan view yang diciptakan
dalam satu kali transaksi melalui create schema.
—MEMBUAT VIEW READ ONLY.

SQL> CREATE SCHEMA AUTHORIZATION boni


2 CREATE TABLE boy.dept (
3 no NUMBER (4) NOT NULL PRIMARY KEY,
4 nama VARCHAR2 (20) NOT NULL
5 CREATE TABLE boy.karyawan (
6 nik NUMBER(4) NOT NULL,
7 dept_no NUMBER(4) NOT NULL,
8 nama VARCHAR2(20),
9 PRIMARY KEY(nik),
10 FOREIGN KEY(dep_no) REFERENCES boy.dept(no)
11 ON DELETE CASCADE
12 CREATE VIEW dep_karyawan_rw
13 AS SELECT a.nik, a.nama AS "Nama Karyawan",
14 a.dept_no, b.nama "Department"
15 FROM boy karyawan a, boy.dept b
16 WHEREa.dept_no = b.no
17 CREATE VIEW dep_karyawan_rro
18 AS SELECT a.nik, a.nama AS "Nama Karyawan",
19 a.dept_no, b.nama "Department"
20 FROM boy karyawan a, boy.dept b
21 WHEREa.dept_no = b.no
22 WITH READ ONLY;
Schema created.

SQL> INSERT INTO boy.dept VALUES (100,'SDM');


SQL> INSERT INTO boy.dept VALUES (100,'Produksi');

Index, View dan Sequence 155


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> INSERT INTO boy.dept VALUES (100,'Pemasaran');


SQL> INSERT INTO boy.karyawan VALUES (100,'SDM');
SQL> INSERT INTO boy.karyawan VALUES (100,'SDM');
SQL> INSERT INTO boy.karyawan VALUES (100,'SDM');
SQL> INSERT INTO boy.karyawan VALUES (100,'SDM');
SQL> COMMIT
Commit complete.

View dep_karyawan_ro merupakan view read-only yang


menggunakan table karyawan dan dept. View ini hanya dapat
dibaca saja dan menghindari manipulasi data dengan delete,
insert, atau update melalui view.
—MEMANIPULASI PADA VIEW READ ONLY.

SQL> SELECT nik, "Nama Karyawan", "Departmen"


2 FROM dep_karyawan_ro;

NIK Nama KARYAWAN Deaprtmen


-----------------------------------------------------
1 Isman SDM
2 Nova SDM
3 Donda Produksi
4 Rino Pemasaran

SQL> INSERT INTO dep_karyawan_ro


2 (nik, dept_no,"Nama Karyawan")
3 VALUES (5,2.0,'Didik');
ORA-017333: virtual column not allowed here

SQL> SELECT column_name, updatable


2 FROM user_updatable columns
3 WHERE table_name = 'DEP_KARYAWAN_RO';

COLUMN_NAME
------------------------------------
NIK NO
Nama_karyawan NO
DEPT_NO NO
Department NO

Index, View dan Sequence 156


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

View dep_karyawan_ro didefinisikan dengan empat kolom


dimana referensi terhadap kolom karyawan.nama dialisakan
menjadi “Deaprtmen”. Ini berarti referensi terhadap kolom itu
bersifat case sensitive karena dinyatakan dalam tanda petik
“”, pada statement kedua tampak bahwa insert tidak dapat
dilakukan ORA17333 da iyu dibuktikan melalui dictionary
USER_UPDATABLE_COLUMNS yang melaporkan bahwa kolom-
kolom view itu tidak dapat diupdate.

View Updatable
Meskipun view tidak menyimpan data seperti table,
perubahan terhadap base table dapat dilakukan melalui view
seperti ditunjukkan pada script berikut :
—MANIPULASI PADA VIEW UPDATABLE.

SQL> SELECT column_name, updatable


2 FROM user_updatable_columns
3 WHERE table_name = 'DEP_KARYAWAN_RW';

COLUMN NAME UPD


-----------------------------------
NIK YES
Nama Karyawan YES
Dept_NO YES
Departmen NO

SQL> INSERT INTO dep_karyawan_rW


2 (nik, dept_no,"Nama Karyawan")
3 VALUES (5,200,'Didik');
1 ROW CREATED

SQL> SELECT * FROM dep_karyawan_rw;

NIK NAma Karyawan Dep_no Departmen


-----------------------------------------
1 Isaman 100 SDM
2 nova 100 SDM
3 donda 200 Produksi
4 rino 300 Pemasaran

Index, View dan Sequence 157


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5 didik 200 Produksi

View dep_karyawan_rw memiliki tiga kolom yang dapat


diupdate dan melalui statement insert di atas , penabahan
data pada view tersebut akan direfleksikan pada table
karyawan.

Materialized View
Materialized view (MV) merupakan objek schema yang berisi
hasil query. Tabel-tabel yang digunakan pada query dapat
berupa hasil, view atau MV lain yang disebut sebagai table
master (replikasi) atau table detail (data warehouse) dan
informasinya tersedia pada dictionary ALL_MVIEWS,
DBA_MVIEWS, dan UESR_MVIEWS.
Materialized view atau snapshotini digunakan pada database
terdistribusi untuk membuat aplikasi dengan sinkronisasi data
pada berbagai site maupun untuk data warehouse yang
mempersiapkan dan menyimpan data agregat. MV
meningkatkan kecepatan akses query melalui perkalkulasi join
dan operasi agregat sebelum menjalankan dan menyimpan
hasinya pada database. Ketika query terhaap MV dilakukan,
query optimizer akan mengetahui bilamana MV yang ada
dapat digunakan dan segera mengakses MV, bukan ke table
detail (query rewrite)

Membuat Materialized View


Privilege pembuatan MV haus di-grant secara langsung jadi
tidak melalui role. Untuk membuat MV pada Schema user
diperlukan priviledge system create materialized view dan
create table atau create any table serta previlege system
select any table. Sedangkan pembuatan MV pada schema
user lain memerlukan previledge system create any
materialized view.
Untuk dapat membuat MV yang berisi summary jumlah
penduduk setiap kota dapat dibuat denagn cara berikut ini :
—MEMBUAT MATERIALIZED VIEW.

Index, View dan Sequence 158


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> CREATE MATERIALIZED VIEW ivana.SNAP_KOTA


2 BUILD IMMEDIATE REFRESH FORCE
3 OF DEMAND AS
4 SELECT k.namakota, COUNT(p.nama) jml_penduduk
5 FROM boy.kota k, boy.penduduk p
6 WHERE k.nokota=p.nokota
7 GROUP BY k.namakota;
Materialize view created

SQL> SELECT * FROM ivana.Snap_kota;


NAMAKOTA JML_PENDUDUK
--------------------------------------------
Pontianak 700000
mempawak 1200000
sintang 500000
...

Perintah diatas menghasilkan data dalam MV (build


immediete) ynag mengguanakn metode refresh force untuk
memilih pemutakhiran data secara incremental atau komplit
MV_sap_kot itu tidak bias digunakan untuk query rewrite. Agar
kemampuan itu tersedia maka opsi with query rewrite
enabled harus dipilih dengan syarat owner memiliki privileged
system query rewrite. Materialized view juga dapat dibat
melalui OEM Console

Untuk memeriksa integritas struktur materialized view seperti


halnya table, index, arau cluster gunakan perintah analyze.
Miasalnya analyze table sanp_kota validate structure cascade.
Jika objek tidak valid, lakukan refresh MV secar komplit namun
jika masih tidak valid lakukan drop dan buat ulang
materiliazednya.

Perintah alter materialized view snap_kota compile melakukan


vaildasi MV secara eksplist dan digunakan pada situasi
dimana telah terjadi perintah drop atu alter tterhadap objek-
objek yang digunakan oleh MV. Perintah alter ini juga

Index, View dan Sequence 159


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

digunakan untuk mengubah karakteristik MV seprti metode


dan mengaktifkan query rewrite.

Materialized View Read/Write


MV dapat ditujukan hanya untuk dibaca saja sehingga
menghindari perubahan MV da data pada table master.
Sebagai conroh daftar kota yang terdapat pada table master
kota dapat dibuatkan MV-nya dengan nama sanp_kota
sehingga user dapat mengakses data melalui MV itu.
MATERIALIZED VIEW UNTUK READ/WRITE.

SQL> CREATE MATERIALIZED VIEW Ivana.SNAP_KOTA


2 BULID IMMEDIATE REFRESH FORCE
3 ON DEMAND AS
4 SELECT *FROM boy.kota;
Materialized view created.

SQL> INSERT INTO Ivana.SNAP_KOTA


2 VALUES (157000,'Poso','Large');
ORA-01732: data manipulation operation not legal on this
view

SQL> DROP MATERIALIZED VIEW Ivana.SNAP_KOTA;


MATERIALIZED view dropped.

SQL> CREATE MATERIALIZED VIEW Ivana.SNAP_KOTA


2 BULID IMMEDIATE REFRESH FORCE
3 ON DEMAND FOR UPDATE
4 AS
5 SELECT * FROM boy.Kota;
Materilaized view created.

SQL> INSERT INTO Ivana.SNAP_KOTA


2 VALUES (157000,'pOSO','lage');
1 ROW CREATED.

Untuk membuat MV yang dapat diupdate, tambahkanklausa


for update pada definisi MV.

Index, View dan Sequence 160


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Refresh Data
Data dalam MV diperbaharui jika ada perubahan pada table
master. Pemutakhirannya dapat dilakukan secara incremental
(fast refresh) atau memutakhirkan semua data (complete)
atau memilih cara refresh yang tersedia (force). Jika MV
menggunakan metode fast refresh, materialized view log akan
merekam perubahan terhadap table master. MV dapat di
refresh secara periodic (automatically on), sesuai keperluan
(on demand) atau jika MV itu berada pada database yang
sama dengan table masternya, refresh terjadi setelah commit
(on commit).

Untuk dapat me –refresh MV secara on commit diperlukan


privilege system on commit refresh atau dengan privilege
objek on commit refresh pada setiap table master yang tidak
dimiliki user. Jika table detail atau master mempunyai primary
key, gunakan opsi primary key, sebaiknya gunakan metode
refresh yang menggunakan rowed.

Materialized View Log


Materialized view log adalah objek schema yang mencatat
perubahan yang terjadi pada table sehingga memungkinkan
table master diperbaharui secara incremental (fast refresh).
Berikut ini dibuat MV log untuk data warehouse dengan fast
refresh yang menggunakan rowed.

—MEMBUAT MATERIALIZED VIEW LOG.

SQL> CREATE MATERIALIZED VIEW LOG ON boy.kota


2 WITH SEQUENCE, ROWID (nokota,namakota,kecamatan)
3 INCLUDING NEW VALUES;
Materialized view log created.

SQL> CREATE MATERILIZED VIEW LOG ON boy.penduduk


2 WITH SEQUENCE, ROWID (noktp, nama, nokota)
3 INCLUDING NEW VALUES;
Materialized view log created.

Index, View dan Sequence 161


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Untuk mendukung fast refresh pada MV tampak bahwa


definisi MV log menyertakan klausa ROWID yang disertai
including new values untuk merekam niali dat yang lama dan
baru pada log.

Data Warehouse
Materialized view digunakan untuk organisasi data pada
warehouse, misalnya dalam pembuatan ringkasan penduduk
per kota melalui script berikut ini :

—MATERIALIZED VIEW UNTUK DATA WAREHOUSE.

SQL> CREATE MATERIALIZED VIEW boy.jiwa_kota


2 BUILD IMMEDIATE
3 REFRESH FAST
4 ENABLE QUERY REWRITE
5 AS
6 SELECT k.namakota, k.kecamatan, COUNT(p.nama) AS
Jiwa
7 FROM boy.kota k, boy.penduduk p
8 WHERE k.nokota = p.nokota]
9 GROUP BY k.namakota, k.kecamatan;
Materialized view created.

Statement diatas membuat MV jwa_kota dengan menghitung


jumlah penduduk dalam satu kota dan kecamatan dengan
operasi join. MV segera dipopulasikan karena menggunakan
metode bulid immediate dan tersedia untuk digunakan
melalui query rewrite. Metode fast refresh bias dilakukan
karena MV log telah dibuat untuk table kota dan penduduk.

SEQUENCE

Sequence digunakan untuk membangkitkan serangkaian nilai


serial yang unik.

Index, View dan Sequence 162


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Membuat Sequence (CREATE SEQUENCE)

Query :

CREATE SEQUENCE nama_sequence


[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CHACE | NOCHACE]

INCREMENT BY berfungsi untuk mendefinisikan jumlah


incrementasi setiap kali terjadi penyisipan
record.
START WITH berfungsi untuk mendefisikan bilangan awal
yang dibangkitkan.
NOMAXVALUE tidak ada batas maximum bilangan sequence
yang digenerate.
MAXVALUE mendefinisikan maximum bilangan sequence
yang digenerate.
CYCLE mendefinisikan bahwa jika telah bilangan
sequence telah maximum, maka nilai akan
diulang dari awal lagi
NOCYCLE tidak ada pengulangan bilangan bila telah
sampai nilai maximum
CACHE bilangan sequence akan ditampung di buffer
NOCACHE bilangan sequence tidak akan ditampung di
buffer.

Contoh :
SQL > CREATE SEQUENCE seq_bulan
INCREMENT BY 1
START WITH 1
MAXVALUE 12;

Index, View dan Sequence 163


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Memodifikasi Sequence (ALTER SEQUENCE)


Query :
ALTER SEQUENCE nama_sequence
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CHACE | NOCHACE]

Contoh :
SQL > ALTER SEQUENCE seq_bulan
INCREMENT BY 2;

Menghapus Sequence (DROP SEQUENCE)


Query :
DROP SEQUENCE nama_sequence;

Contoh :
DROP SEQUENCE seq_bulan;

JURNAL
1. Sebutkan dan jelaskan keuntungan jika kita
menggunakan index!
2. Apakah semakin banyak index yang kita pakai maka
semakin baik pula pengaruhnya terhadap performansi
DBMS?
3. Berdasarkan studi kasus yang ada di modul 1 lakukan
analisis terhadap tabel-tabel yang ada untuk
menentukan index yang akan dibuat kemudian buatlah
index pada tabel-tabel tersebut dan berikan alasan
kenapa index tersebut harus dibuat!
4. Apakah syarat-syarat yang harus dipenuhi sehingga
sebuah View dapat dinyatakan sebagai view
updatable?

Index, View dan Sequence 164


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Buatlah contoh view updatable berdasarkan studi


kasus yang ada di modul 1!
6. Buatlah view yang isinya merupakan hasil outer join
dari tabel buku dan jenis dimana tabel buku menjadi
acuannya!
7. Jelaskan fungsi/kegunaan dari sequence jika dikaitkan
dengan tabel!
8. Berdasarkan studi kasus yang ada di modul 1 lakukan
analisis terhadap tabel-tabel yang ada untuk
menentukan sequence yang akan dibuat kemudian
buatlah sequence pada tabel-tabel tersebut dan
berikan alasan kenapa sequence tersebut harus
dibuat!

Index, View dan Sequence 165


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

10 SIMPLE REPORT

Overview

Pokok-pokok bahasan di dalam bab ini menjelaskan cara


mengatur format tampilan data dengan mengatur
environment melalui perintah SET dan menggunakan
perintah-perintah SQL*Plus lainnya. Pengaturan format
tampilan data ini sering dipakai di dalam file script yang
ditujukkan untuk menghasilkan laporan sederhana (simple
report).

Tujuan

25. Dapat menagatur format tampilan data pada SQL*PLUS .


26. Dapat membuat laporan sederhana menggunakan
SQL*PLUS.

Index, View dan Sequence 166


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Mengatur Dimensi Halaman


Dimensi halaman dari keluaran SQL*Plus dapat diatur melalui
system variable PAGESIZE dan LINESIZE. System variable
PAGESIZE menentukan jumlah baris maksimum yang
ditampilkan dalam satu halaman. Sedangkan system variable
LINESIZE menentukan jumlah karakter maksimum yang
ditampilkan dalam satu baris. Dengan demikian kedua system
variable ini dapat mengatur tinggi dan lebar dari halaman
keluaran SQL*Plus.
Berikut ini ditunjukkan dua perintah SET untuk menentukan
nilai system variable PAGESIZE dan LINESIZE pada current
environment SQL*Plus.
SQL> set pagesize 12
SQL> set linesize 60
Dengan environment seperti di atas, coba lakukan sebuah
query seperti berikut ini. Query tersebut menampilkan 15
baris string karakter yang masing-masing panjangnya 60
bytes. Data dictionary DICTIONARY digunakan sebagai sumber
data hanya karena jumlah baris data yang ada pada view
tersebut pasti lebih dari 15 baris.

SQL> SELECT ‘**********$$$$$$$$$$**********$$$$$$$$$$’


2 ||’ **********$$$$$$$$$$’ pages
3 FROM DICTIONARY
4 WHERE ROWNUM<=15;

PAGES
------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
PAGES

Index, View dan Sequence 167


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
15 row selected
Perhatikan hasil query di atas. Suatu halaman di mulai dengan
satu baris kosong. Setelah itu diikuti oleh judul baris kolom
(heading) dan baris garis-bawah judul kolom. Kemudian,
dibawahnya ditampilkan baris-baris data. Apabila panjang
baris judul kolom (atau baris data) lebih besar dari LINESIZE,
baris tersebut ditampilkan dalam dua baris atau lebih. Apabila
baris-baris yang ditampilkan tidak cukup ditampung dalam
satu halaman, akan dibuat halaman baru yang terdiri atas
satu baris kosong, judul kolom, garis-bawah judul kolom, dan
baris-baris data. Demikian seterusnya sampai semua data
ditampilkan. Penutup dari halaman terkahir adalah sebuah
baris kosong, dan atribut-atribut lainnya seperti FEEDBACK
dan TIMING. Apabila PAGESIZE diberi nilai 0 (nol), yang
ditampilkan hanya baris-baris data saja tanpa awalan baris
kosong, judul kolom, garis-bawah judul kolom dan atribut-
atribut lainnya. Baris kosong yang berada sebelum baris judul
kolom sebenarnya dapat ditentukan jumlahnya dengan
mengatur system variable NEWPAGE. Pada keluaran hasil
query di atas, nilai NEWPAGE yang digunakan adalah satu
(default). Perlu diinformasikan juga bahwa Anda dapat melihat
nomor baris yang sedang ditampilkan dari sebuah halaman
menggunakan perintah SHOW LNO. Nomor halaman dapat
dilihat dengan perintah SHOW PNO.
Apabila tidak disebutkan secara khusus, PAGESIZE dan
LINESIZE yang digunakan pada pokok-pokok bahasan
berikutnya didalam bab ini adalah 50 dan 65.

Menggunakan BREAK
Perintah BREAK dapat digunakkan untuk hal-hal seperti
berikut ini.
 Menampilkan hanya satu nilai untuk beberapa nilai
yang sama pada kolom yang ditentukan.

Index, View dan Sequence 168


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Menambahkan baris kosong setiap kali nilai dari kolom


yang ditentukan berubah.
 Mencetak nilai hasil perhitungan untuk kelompok baris
dengan nilai kolom yang sama pada kolom yang
ditentukan (lihat pokok batasan berikutnya).

Bentuk umum perintahnya adalah sebagai berikut.


BRE[AK] [{ ON <column | expr | ROW | REPORT>
[SKIP n | [SKIP] PAGE] [NODUP[LICATES] | DUP[LICATES]]
}]

Nama column tidak boleh mengandung schema dan/atau


table. Untuk kolom-kolom yang menggunakan format
“tab_name,col_name” di dalam SQL statement-nya, sebaiknya
berikan kolom alias pada SQL statement tersebut sehingga
nama kolom alias tersebut dapat digunakan pada perintah
BREAK.
Jika expr digunakan, break tersebut berlaku jika expr terdapat
pada SQL statement dan tanpa menggunakan kolom alias.
 Pilihan ON ROW digunakan untuk break setiap kali
baris berikutnya berbeda dengan baris sebelumnya.
 ON REPORT biasanya digunakan bersamaan dengan
kalkulasi untuk keseluruhan data (lihat perintah
COMPUTE pada pokok bahasan berikutnya).
 “SKIP n” dapat digunakan untuk memberikan baris
kosong sebanyak n baris setiap masuk ke break
berikutnya. Apabila SKIP PAGE digunakan keluaran
diceyak di halaman berikutnya setiap kali break terjadi.
 NODUP[LICATES] digunakan apabila nilai-nilai yang
duplikat tida ingin dicetak. Pilihan ini adalah default.
 DUP[LICATES] digunakan apabila nilai-nilai yang
duplikat ingin dicetak.

Berikut ini diberikan sebuah contoh penggunaan perintah


BREAK untuk kolom bayar. Sebuah baris kosong dicetak
setiap kali break terjadi.
SQL> break on bayar skip 1

Index, View dan Sequence 169


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> SELECT nim, prodi, nama, bayar


2 FROM mahasiswa ORDER BY nim;
NIM NAMA PRODI BAYAR
--------------------------------------------------------------------------------------
----------
301070
01 ANGGI NOVEMBRA MI 2000000

301070
03 WIDO KESUMA MI 2000000

301070
04 MURDIJAT ARIF PRABOWO MI 15000000

302070 TK ANUGRAH DWI


05 ARDIANTO 8000000

302070
06 ANDRE ADRIAN TK 2000000

302070
07 ANDI HAKIM ARIF TK 4000000

303070
08 SWANDY EFRAIM MANALU KA 10000000

303070
09 SITI NURFAUZIYAH KA 3500000

Bagaimana jika ingin menggunakan banyak criteria break?


Anda dapat menggunakan klausa ON sebanyak criteria yang
diinginkan. Contoh-contoh break dapat ditemukan pada
pokok-pokok bahasan berikutnya. Apabila perintah BREAK
dijalankan tanpa klausa ON, perintah tersebut ditujukan untuk
memunculkan perintah BREAK yang terakhir. Sebagai contoh
ditunjukkan di bawah ini.
SQL> break
Break on bayar skip 1 nodup

Index, View dan Sequence 170


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Perlu diingat bahwa setiap kali perintah BREAK dijalankan,


perintah tersebut berlaku sampai perintah BREAK berikutnya
dijalankan atau sampai CLEAR BREAKS dijalankan. Perintah
CLEAR BREAKS berguna untuk menghapus definisi break yang
ada seperti yang ditunjukkan seperti ini.
SQL> clear breaks
Breaks cleared

Melakukan Kalkulasi dengan COMPUTE

Perintah COMPUTE dapat digunakan untuk melakukan


perhitungan terhadap sebuah kolom yang ekspresi dari
sekelompok baris data. Bentuk umum perintahnya adalah sebagai
berikut.
COMPUTE [ {function [LAB[EL] text]} OF <expr | column>
ON <expr | column | REPORT | ROW> ]

Satu perintah COMPUTE dapat menggunakan lebih dari satu


fungsi. dengan urutan pengerjaan COMPUTE.
 Label text dapat diberikan untuk membuat text
menjadi tanda atau cap pada baris hasil COMPUTE. Jika
tidak diberikan, default text adalah nama fungsi.
 Klausa OF berfungsi untuk menentukan expr atau
kolom apa yang dikalkulasi.
 KLAUSA ON berfungsi untuk menentukan criteria break
untuk satu perhitungan COMPUTE.
Sebagai catatan, hasil dari perintah COMPUTE hanya dicetak
jika perintah BREAK disertakan. Nama column atau expr pada
klausa ON perintah COMPUTE harus ada pada klausa ON
perintah BREAK tersebut.

Fungsi-fungsi untuk Perintah COMPUTE


Index, View dan Sequence 171
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Nama Fungsi Perhitungan Tipe Data


AVG Nilai rata-rata. NUMBER
Baris yang
diperhitungkan
hanya baris dengan
nilai yang tidak
NULL
COU[NT] Menghitung jumlah Semua
baris yang nilai
column atau expr-
nya tidak NULL
MIN[MUM] Nilai minimum NUMBER, CHAR,
VARCHAR2
MAX[MUM] Nilai maksimum NUMBER, CHAR,
VARCHAR2
NUM[BER] Menghitung jumlah Semua
baris, termasuk
yang bernilai NULL
SUM Jumlah nilai NUMBER
SID Standar deviasi NUMBER
dari nilai column
atau expr yang
tidak NULL
VAR[IANCE] Variance dari nilai NUMBER
column atau expr
yang tidak NULL

Berikut ini diberikan sebuah contoh perhitungan rata-rata,


nilai minimum, dan nilai maksimum dari bayar yang
dikelompokkan prodi. Pengurutan data (ORDER BY) juga
berpengaruh pada keluaran. Perhatikan juga, BREAK
dikenakan pada kolom departemen dengan skip satu baris
dan pada kolom pos_id tanpa skip.

SQL> break on prodi skip 2;


SQL> compute avg max min of bayar on prodi;
SQL> select nim, nama, prodi, bayar from mahasiswa order
by prodi;

Index, View dan Sequence 172


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

NIM NAMA PRODI BAYAR


30307009 SITI NURFAUZIYAH KA 3500000
30307008 SWANDY EFRAIM MANALU 10000000
***** ----------
avg 6750000
minimum 3500000
maximum 10000000
30107003 WIDO KESUMA MI 2000000
30107001 ANGGI NOVEMBRA 2000000
30107004 MURDIJAT ARIF PRABOWO 15000000
***** ----------
avg 6333333,33
minimum 2000000
maximum 15000000
30207007 ANDI HAKIM ARIF TK 4000000
30207005 ANUGRAH DWI ARDIANTO 8000000
30207006 ANDRE ADRIAN 2000000
***** ----------
avg 4666666,67
minimum 2000000
maximum 8000000

8 rows selected.

Sebagai catatan tambahan, semua atribut yang telah


ditentukan dengan perintah COMPUTE dapat dihapus
menggunakan perintah CLEAR COMPUTES.

Perintah COLUMN Untuk Memformat Kolom

Perintah ini digunakan untuk memformat judul kolom maupun


nilai kolom. Bentuk umum perintahnya adalah sebagai berikut.
COL[UMN] [<column | expr > {[option]}]

Index, View dan Sequence 173


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Apanila perintah COLUMN digunakan tanpa column atau expr


maka SQL*Plus akan mengeluarkan atribut COLUMN yang
sedang berlaku pada session SQl*Plus tersebut (bukan session
user database). Apabila perintah COLUMN digunakan dengan
menyertakan column atau expr namun tanpa option, SQL*Plus
akan mengeluarkan atribut COLUMN untuk kolom atau
ekspresi yang disebutkan.

Nilai option dapat berupa klausa-klausa yang diperhatikan


pada Tabel.

Tabel Option pada Perintah COLUMN


Klausa Desripsi
ALI[AS] alias Memberi nama
alias yang dapat
digunakan untuk
menggantikan
nama column pada
perintah BREA,
COMPUTE, ataupun
COLUMN
CLE[AR] Mengembalikan
atribut colomn ke
nilai default sesuai
dengan tipe data,
panjang data, dan
sebagainya
FOLD_A[FTER] Menambahkan
karakter baris baru
(carriage return)
setelah judul
column dan setelah
nilai column dari
setiap baris. Tidak
berlaku untuk
kolom terakhir pada
klausa SELECT
FOLD_B[EFORE] Menambahkan
karakter baris baru

Index, View dan Sequence 174


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

(carriage return)
sebelum judul
column dan setelah
nilai column dari
setiap baris. Tidak
berlaku untuk
kolom pertama
pada klausa
SELECT
FOR[MAT] format Menentukan format
tampilan nilai
column. Format
untuk kolom
karakter berupa
“An” dimana n
adalah lebar kolom.
Format untuk kolom
DATE mengikuti
NLS_DATE_FORMAT
namun lebar
kolomnya apat
ditentukan dengan
“An”. Format untuk
kolom NUMBER
sama dengan
format yang
digunakan pada
fungsi
TO_CHAR(NUMBER)
yang ditampilkan
pada Tabel 3.7
pokok bahasan
3.5.2. *)
HEA[DING] Menentukan text
sebagai judul kolom
untuk
menggantikan judul
kolom yang
diberikan di dalam

Index, View dan Sequence 175


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SELECT statement.
String karakter text
dapat mengandung
karakter HEADSEP
untuk menampilkan
judul kolom dalam
dua baris atau
lebih.
JUS[TIFY] Menentukan apaah
<L[EFT]|C[ENTER] judul kolom dan
nilai kolom
ditampilkan rata
kiri, di tengah-
tengah.
R[IGHT]> Atau rata kanan.
Jika tidak
disebutkan maka
kolom NUMBER
ditampilkan rata
kanan dan kolom
lainnya rata kiri
LIKE[expr|alias] Menyalin atribut
tampilan dari kolom
lain. Atribut yang
disalin hanya
atribut yang tidak
ditemtukan secara
eksplisit.
NEWL[INE] Sama efeknya
dengan
FOLD_BEFORE,
yakni menampilkan
baris baru sebelum
nilai column
ditampilkan
NEW_V[ALUE] variable Digunakan untuk
membuat variable
yang nilainya
adalah nilai kolom.

Index, View dan Sequence 176


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Variable tersebut
biasanya digunakan
pada perintah TITLE
untuk membuat
judul-atas pada
laporan master
detail. Agar
pengaruhnya
terlihat, kolom pada
perintah ini harus
digunakan juga
apada perintah
“BREAK…SKIP
PAGE”
NOPRI[NT]|PRI[NT] Mengatur apakah
judul dan nilai
column dicetak di
layar (ON) atau
tidak (OFF). Default
adalah OFF
NUL[L] text Menentukan text
sebagai nilai yang
dicetak pada kolom
yang ditentukan
OLD_V[ALUE] variable Digunakan untuk
membuat variable
yang nilainya
adalah nilai kolom.
Variable tersebut
biasanya digunakan
pada perintah
BTITLE untuk
membuat judul-
bawah pada
laporan master
detail. Kolom pada
perintah ini harus
digunakan juga
pada perintah

Index, View dan Sequence 177


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

“BREAK…SKIP
PAGE”
ON|OFF Mengaktifkan (ON)
atau menonaktifkan
(OFF) atribut-atribut
kolom yang sudah
didefinisikan
WRA[PPED]|WOR[D_WRAPPED| Perintah ini khusus
TRU[NCATE] untuk kolom DATE
atau karakter yang
lebarnya ditentukan
namun nilai kolom
tersebut melebihi
lebar kolom yang
disediakan. Pilihan
WRAPPED akan
melanjutkan bagian
yang tidak
mencukupi ke baris
yang baru pada
kolom yang sama.
Pilihan
WORD_WRAPPED
akan melanjutkan
kata-kata yang
tidak mencukupi ke
baris yang baru
pada kolom yang
sama . Pilih
TRUNCATE akan
memotong bagian
yang tidak
mencukupi.
*) Format yang tercantum pada table 3.7 hampir semuanya
berlaku kecuali: FM, TM, U, dan X. Selain itu ada tambahan
format “DATE” yang bertujuan untuk menampilkan nilai
NUMBER sebagai Julian_date dalam format DD/MM/YY.

Index, View dan Sequence 178


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Berikut ini diberikan sebuah contoh performatan kolom-kolom


dari data-data mahasiswa. Petrintah-perintah tersebut
ditulisakan di dalam script “rpt_mahasiswa.sql”.
--rpt_mahasiswa.sql

/* Mengatur beberapa nilai system variable*/


SET PAGESIZE 600
SET LINESIZE 950
SET HEADSEP "|"
SET RECSEP OFF

/*Menghapus BREAKS, COMPUTES, dan COLUMNS*/


CLEAR BREAKS;
CLEAR COMPUTES;
CLEAR COLUMNS;

/*Mengatur format kolom*/


COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

/*Query untuk menampilkan data-data mahasiswa*/


select nim, nama, prodi, bayar from mahasiswa ORDER BY
1,2;

Keluaran dari script diatas ditujukan berikut ini.


SQL> @ C\:rpt_mahasiswa.sql
NIM NAMA PRODI BAYAR
JUR
30107001 ANGGI NOVEMBRA MI 2.000.000,00
30107003 WIDO KESUMA MI 2.000.000,00
30107004 MURDIJAT ARIF MI 15.000.000,00
PRABOWO
30207005 ANUGRAH DWI ARDIANTO TK 8.000.000,00
30207006 ANDRE ADRIAN TK 2.000.000,00
30207007 ANDI HAKIM ARIF TK 4.000.000,00
30307008 SWANDY EFRAIM MANALU KA 10.000.000,00
30307009 SITI NURFAUZIYAH KA 3.500.000,00

8 rows selected.

Index, View dan Sequence 179


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Perhatikan script dan keluaran di atas. Perhatikan pula bagian-


bagian yang diberi latar abu-abu. Lebar kolom prodi
ditentukan sebesar 10 karakter. Judulnya menjadi PRODI JUR
dan dituliskan dalam dua baris (HEADING “PRODI | JUR”).
Lebar kolom nama ditentukan sebesar 20 karakter dan
diberikan pilihan WORD_WRAPPED. Dengan demikian maka
string posisi yang lebih dari 20 karakter akan dituliskan dalam
dua baris.
Lihatlah nama “MURDIJAT ARIF PRABOWO” yang nama
terakhirnya di-wrap. Kolom bayar diformat dengan pemisah
grup (ribuan) dan diberi tanda decimal (tanda titik). Jumlah
angka pecahan decimal adalah dua angka. Sebagai catatan
tambahan, semua atribut tampilan yang ditentukan oleh
perintah COLUMN dapat dihapus dengan menggunakan
perintah CLEAR COLUMNS.

Memberi Judul pada Halaman


Judul halaman dapat diberikan dengan menggunakan perintah
TTITLE dan BTIITLE. TTITLE untuk judul atas, sedangkan
BTITLE untuk judul bawah. Bentuk umum kedua perintah ini
diperlihatkan di bawah ini.

TTITLE{[printspec [text | variable ]]} [ON|OFF]

BTITLE{[printspec [text | variable ]]} [ON|OFF]

Nilai printcpec bertujuan untuk menentukan spesifikasi cetak


dari text atau variable. Pilihan-pilihan untuk printspec
diberikan pada Tabel.

Tabel Spesifikasi Cetak pada Perintah TTITLE dan BTITLE


Spesifikasi Cetak Kegunaan
COL n Menentukan posisi ceak dimulai
dari kolom ke n.
S[KIP] [n] Memulai baris baru n berikutnya

Index, View dan Sequence 180


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

dari baris sebelumnya. Jika n tidak


disertakan, n=1. Jika n=0, text
atau variable dicetak pada baris
berikutnya
TAB n Menambahkan tab maju sebanyak
n.Jika n negative, yang dicetak
adalah tab mundur
LE[FT] | CE[NTER] | Menentukan apakah judul dicetak
R[IGHT] rapat kiri, di tengah , atau rapat
kanan
BOLD Mencetak dengan huruf tebal.
Pada SQL*Plus disimbolkan dengan
mencetak text atau variable
sebanyak tiga kali. Beberapa
system operasi dapat
menerjemahkan menjadi cetak
tebal apabila dicetak ke printer
FORMAT format Menentukan format. Format yang
valid adalah yang berlaku untuk
perintah COLUMN.

Nilai variable dapat diisi dengan user variable, termasuk


variable yang dibuat dengan perintah COLUMN, dan juga
dapat diisi dengan nilai-nilai system SQL*Plus. Nilai-nilai
system SQL*Plus dapat berupa salah satu dari daftar berikut
ini.
 SQL.LNO, untuk menampilkan nomor dari current line.
 SQL.PNO, untuk menampilkan nomor dari current
page.
 SQL.RELEASE, untuk menampilkan nomor release
Oracle.
 SQL.ERRORCODE, untuk menampilkan kode kesalahan.
 SQL.USER, untuk menampilkan nama current user.

Kecuali SQL.ERRORCODE, nilai-nilai pada daftar di atas dapat


juga ditampilkan menggunakan perintah SHOW. Namun,
perintah SHOW tidak dapat yang sudah pernah diberikan.
Pilihan ON atau OFF dapat diberikan untuk mengaktifkan ayau
menonaktifkan TIITLE atau BTIITLE tanpa harus menghapus

Index, View dan Sequence 181


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

definisi yang sudah diberikan. Jika perintah TIITLE atau


BTIITLE digunakan tanpa klausa apapun, perintah tersebut
ditujukan untuk menampilkan definisi dari TIITLE atau BTIITLE
yang sedang berlaku.

Menambahkan Report Header dan Footer


Perintah untuk menambahkan report header dan report footer
hampir sama dengan perintah TTITLE dab BTITLE. Bentuk
umum perintahnya adalah sebagai berikut.

REPH[EADER] [PAGE] {[printspec [text | variable ]]} [ON|


OFF]

REPF[OOTER] [PAGE] {[printspec [text | variable ]]} [ON|


OFF]

Jika pilihan PAGE disertakan, halaman baru akan dibuat


setelah report header ditampilkan atau sebelum report footer
ditampilkan. Pilihan-pilihan lainnya sama fungsinya dengan
fungsi pilihan pada perintah TTITLE atau BTITLE.

Tidak seperti judul halaman, report header dan report footer


hanya satu kali dicetak untuk satu SELECT statement. Jika
SELECT Statement menghasilkan banyak baris data sehingga
membutuhkan tempat lebih dari satu halaman, judul halaman
(TITILE dan BTITLE) akan dicetak sebanyak halaman yang
ada. Sedangkan report header ditampilkan sebelum SELECT
statement diproses dan report footer ditampilkan setelah
SELECT statement diproses. Jadi, yang dianggap satu report
adalah satu SELECT statement. Report header dan report
footer digunakan bersama-sama dengan judul-atas dan judul-
bawah halaman.

Menambahkan Tanggal
Untuk menambahkan konstanta tanggal, tentunya dapat
digunakan perintah TTITLE. Namun, untuk menambahkan
tanggal sesuai dengan tanggal script dijalankan, dibutuhkan

Index, View dan Sequence 182


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

“kerjasama” antara perintah COLUMN, SQL, statement, dan


TTITLE/BTITLE (atau REPHEADER/REPFOOTER). Perintah
COLUMN digunakan untuk menampung nilai user variable.
SQL statement digunakan untuk menampung nilai SYSDATE
ke dalam user variable. Perintah TTITLE digunakan untuk
mencetaknya.
Berikut ini diberikan sebuah contoh sederhana. Perintah
COLUMN digunakan untuk membuat variable tg_skrg
(NEW_VALUE) yag nilainya diambil dari kolom today. Kolom
today dipilih pada SELECT statement dan nilainya adalah
SYSDATE. Perintah TTITLE ditujukan untuk mencetak nilai dari
variable tgl_skrg.

Menyimpan dan Mencetak Laporan


Seperti yang telah disinggung pada awal bab ini, semua yang
dipaparkan di dalam subbab ini berguna untuk membuat
sebuah laporan berdasarkan data yang ada di dalam
database. Biasanya, perintah-perintah dari sebuah laporan,
termasuk pengaturan environment yang berhubungan dengan
tampilan, disimpan di dalam file (script) agar dapat digunakan
secara berulang. Hasil atau keluaran dari eksekusi file laporan
tersebut biasanya juga disimpan di dalam file (soft copy)
kemudian dapat dicetak di atas ertas (hard copy). Perintah
SPOOL, yang dijelaskan pada Bab 2, dapat digunakan untuk
mencetak eluaran ke atas kertas.

Untuk mengingatkan kembali, perintah untuk memulai dan


mengakhiri SPOOL ditampilkan berikut ini.
SPOOL file_name[.ext]
SPOOL [OFF|OUT]

Pilihan OFF maupun OUT sama-sama bertujuan untuk


mengakhiri spooling (semua keluaran dituliskan ke dalam file
spool). Khusus untuk OUT, setelah penulisan ke file dilakukan,

Index, View dan Sequence 183


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

file tersebut dikirim ke default printer untuk dicetak sebagai


hard copy. Hanya saja pada system operasi Windows, perintah
SPOOL OUT tidak mendukung fungsi pencetakan tersebut.
Pilihan OUT mempunyai efek yang sama dengan OFF.
Berikut ini diberikan sebuah script laporan dengan melibatkan
perintah SPOOL. Keluaran dari script tersebut disimpan di
dalam file yang namanya dapat ditentukan oleh user.
Keluaran tidak ditampilkan pada layer SQL*Plus (SET
TERMOUT OFF).

--rpt_bayar_mahasiswa.sql

-- Mengatur beberapa nilai system variable


SET PAGESIZE 35
SET LINESIZE 60
SET HEADSEP ON
SET RECSEP OFF
SET FEEDBACK OFF
-- Menghapus BREAKS, COMPUTES, dan COLUMNS
CLEAR BREAKS
CLEAR COMPUTES
CLEAR COLUMNS

-- Melakukan perhitungan jumlah pembayaran mahasiswa.


BREAK ON prodi skip 2
COMPUTE avg max min of bayar on prodi

--Mengatur format kolom


COLUMN today NOPRINT NEW_VALUE v_today
COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

--Mengakifkan RepHeader dan RepFooter


REPHEADER "--START OF REPORT--"
REPFOOTER "--END OF REPORT--"

--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP
CENTER"==============================================="
SKIP 2 LEFT "User : " SQL.USER SKIP RIGHT
"Halaman :" FORMAT 99 SQL.PNO SKIP LEFT "Tanggal :"

Index, View dan Sequence 184


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

FORMAT A20 v_today SKIP LEFT


"==========================================================
===" BTITLE LEFT
"----------------------------------------------------------
------------------------------------"SKIP 2

--Mengaktifkan SPOOL. Nama file dapat diinput oleh user


SET DEFINE ON
ACCEPT file_name PROMPT "File penampung hasil report: "
SPOOL &file_name

--Menonaktifkan pencetakan keluaran ke SQL* PLUS


SET TERMOUT OFF

-- Query untuk menampilkan data-data mahasiswa

select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama,


prodi, bayar from mahasiswa ORDER BY 1,2;

--Menghentikan Spool
SPOOL OFF

--Mengembalikan beberapa nilai system variable ke default


SET FEEDBACK ON
SET RECSEP WRAPPED
SET TERMOUT ON

Apabila script diatas dijalankan, yang ditampilkan hanya teks


untuk meminta user memasukkan nama file (dan direktori)
tempat penampungan hasil laporan seperti yang ditunjukkan
berikut ini.

SQL> @ C:\rpt_bayar_mahasiswa.sql
File penampung hasil report : C:\BelajarSQL\rpt_hasil.txt

Anda dapat melihat isi file laporan yang baru saja dibuat
menggunakan perintah GET atau membukanya dengan
sembarang text editor. Apabila Anda meliaht isi file tersebut
dengan menggunakan perintah GET, baris-baris kosong tidak
akan dimunculkan. Isi file laporan tersebut adalah seperti
berikut ini.
Index, View dan Sequence 185
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

DAFTAR MAHASISWA
===============================================

User : DEDY
Halaman : 1
Tanggal :09-AGT-2008
----------------------------------------------------------

--START OF REPORT--
PRODI
NIM NAMA JUR BAYAR
---------- -------------------- ---------- --------------
30107001 ANGGI NOVEMBRA MI 2.000.000,00
30107003 WIDO KESUMA 2.000.000,00
30107004 MURDIJAT ARIF 15.000.000,00
PRABOWO
********** --------------
avg 6.333.333,33
minimum 2.000.000,00
maximum 15.000.000,00

30207005 ANUGRAH DWI ARDIANTO TK 8.000.000,00


30207006 ANDRE ADRIAN 2.000.000,00
30207007 ANDI HAKIM ARIF 4.000.000,00
********** --------------
avg 4.666.666,67
minimum 2.000.000,00
maximum 8.000.000,00

30307008 SWANDY EFRAIM MANALU KA 10.000.000,00


30307009 SITI NURFAUZIYAH 3.500.000,00
-

DAFTAR MAHASISWA
===============================================

User : DEDY
Halaman : 2
Tanggal :09-AGT-2008
----------------------------------------------------------

Index, View dan Sequence 186


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

PRODI
NIM NAMA JUR BAYAR
---------- -------------------- ---------- --------------
********** --------------
avg 6.750.000,00
minimum 3.500.000,00
maximum 10.000.000,00

--END OF REPORT--

Menciptakan output HTML dengan SQL * Plus


Sejak versi 8.1.6 oracle memungkinkan kita untuk
menciptakan HTML dengan SQL * Plus. Sangatlah mudah
untuk mengubah script dari mode karakter ke html, karena
seluruh tag SQL * Plus dapat dikonversi ke tag HTML tanpa
mengubah kode.

--rpt_bayar_mahasiswa_html.sql
--menjalankan output dalam html dan melakukan spool
terhadap output
Set markup html on spool on
--menentukan file dengan ekstension htm atau html
Spool file_name.html
--Query
Select * from table_name;
--mengakhiri file html
Spool off
--mengatur kembali ke output normal
Set markup html off spool off

Index, View dan Sequence 187


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Kemudian perintah diatas dieksekusi sbb:


SQL> @ C:\rpt_bayar_mahasiswa_html.sql
File penampung hasil report : C:\BelajarSQL\rpt_hasil.html

Berikut ini contohnya jika report yang telah dibuat

sebelumnya dijadikan file HTML:


--Menjalankan output dalam html
SET MARKUP HTML ON SPOOL ON

-- Mengatur beberapa nilai system variable


SET PAGESIZE 35
SET LINESIZE 60
SET HEADSEP ON
SET RECSEP OFF
SET FEEDBACK OFF

-- Menghapus BREAKS, COMPUTES, dan COLUMNS


CLEAR BREAKS
CLEAR COMPUTES
CLEAR COLUMNS

-- Melakukan perhitungan jumlah penerimaan pegawai per-


tahun.
BREAK ON prodi skip 2
COMPUTE avg max min of bayar on prodi

--Mengatur format kolom


COLUMN today NOPRINT NEW_VALUE v_today
COLUMN nim FORMAT A10 WORD_WRAPPED
COLUMN nama FORMAT A20 WORD_WRAPPED
COLUMN prodi FORMAT A10 WORD_WRAPPED HEADING "PRODI|JUR"
COLUMN bayar FORMAT 99G999G999D99

--Menonakifkan RepHeader dan RepFooter


REPHEADER "--START OF REPORT--"
REPFOOTER "--END OF REPORT--"

--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP
CENTER"==============================================="

Index, View dan Sequence 188


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SKIP 2 LEFT "User : " SQL.USER SKIP RIGHT


"Halaman :" FORMAT 99 SQL.PNO SKIP LEFT "Tanggal :"
FORMAT A20 v_today SKIP LEFT
"==========================================================
===" BTITLE LEFT
"----------------------------------------------------------
------------------------------------"SKIP 2

--Mengaktifkan SPOOL. Nama file dapat diinput oleh user


SET DEFINE ON
ACCEPT file_name PROMPT "File penampung hasil report: "
SPOOL &file_name
--Menonaktifkan pencetakan keluaran ke SQL* PLUS
SET TERMOUT OFF

-- Query untuk menampilkan data-data pegawai

select TO_CHAR(SYSDATE,'DD-MON-YYYY')today, nim, nama,


prodi, bayar from mahasiswa ORDER BY 1,2;

--Menghentikan Spool
SPOOL OFF

--Mengembalikan beberapa nilai system variable ke default


SET FEEDBACK ON
SET RECSEP WRAPPED
SET TERMOUT ON
SET MARKUP HTML OFF SPOOL OFF;

Hasil dari eksekusi script diatas adalah sbb:


DAFTAR MAHASISWA
===================================
User : DEDY
Halaman : 1
Tanggal : 09-AGT-2008

Index, View dan Sequence 189


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

PRODI
NIM NAMA BAYAR
JUR
30107001 ANGGI NOVEMBRA MI 2.000.000,00
30107003 WIDO KESUMA 2.000.000,00
MURDIJAT ARIF
30107004 15.000.000,00
PRABOWO
********** -------------
avg 6.333.333,33
minimum 2.000.000,00
maximum 15.000.000,00
ANUGRAH DWI
30207005 TK 8.000.000,00
ARDIANTO
30207006 ANDRE ADRIAN 2.000.000,00
30207007 ANDI HAKIM ARIF 4.000.000,00
********** -------------
avg 4.666.666,67
minimum 2.000.000,00
maximum 8.000.000,00
SWANDY EFRAIM
30307008 KA 10.000.000,00
MANALU
30307009 SITI NURFAUZIYAH 3.500.000,00
********** -------------
avg 6.750.000,00
minimum 3.500.000,00
maximum 10.000.000,00

JURNAL
1. Berdasarkan contoh-contoh yang ada buatlah report
untuk transaksi-transaksi yang terjadi dalam proses
jual beli buku yang ada di modul 1 (format report harus
sejelas dan selengkap mungkin)!
2. Dari report yang ada di nomor 1 buatlah output HTML!

Index, View dan Sequence 190


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

11 USER, PRIVILEGE dan ROLE

Overview

DBA (Database Administrator) perlu mengendalikan hak-


hak dan akses pemakai untuk keperluan penjagaan
terhadap penyalahgunaan hak-hak. Pada bab ini akan
dibahas pembuatan, pembuangan dan pengubahan-
pengubahan pemakai.

Tujuan

1. Mampu membuat user pada oracle


2. Mampu memonitor user.
3. Mampu melakukan manipulasi pada user.
4. Mampu mengenal obyek dan system privilages.
5. Mampu untuk memberikan privilages kepada user.
6. Mampu mengerti tentang roles dan menggunakannya.
7. Mampu membuat dan memodifikasi roles.
8. Mampu melakukan controlling dan removing pada

User, Privilege dan Role 191


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

roles.

USER MANAGAMENT

User sebagai Tipe


Secara umum operasi-operasi untuk pemakai adalah tiga
operasi klasik yaitu CREATE, ALTER, dan DROP. Tiga operasi
klasik ini berlaku bagi objek-objek hampir semua tipe dalam
database (bahkan ke objek bertipe database itu sendiri).

User versus Schema


Literatur oracle sering sekali mamakai kata ‘schema’, dan
kata ini dipakai secara kurang hati-hati. Oracle memiliki
operasi CREATE SCHEMA, namun tidak ada operasi DROP
SCHEMA dan ALTER SCHEMA.
Schema didefinisikan sebagai kumpulan objek-objek yang
dimiliki pemakai/user. Kumpulan objek yang dimiliki pemakai
SYSTEM membentuk schema SYSTEM. Kumpulan objek yang
dimiliki SCOTT membentuk schema SCOTT. Anda dapat
melihat bahwa kadang ada literature atau piranti yang
menyebutkan CREATE SCHEMA namun tidak membuat objek
sama sekali. Dalam hal tersebut, lebih tepat jika piranti
meyatakan CREATE USER.
Pemakain schema lebih tepat diterapkan pada topic data
warehouse, saat membicarakan star schema. Selain itu
dengan adanya schema semakin memperbanyak tree dalam
beberapa piranti (termasuk oracle enterprise manager).

User versus account


Ada suatu istilah lagi yang terkait dengan user yaitu account.
Istilah ini kelihatannya tidak begitu tepat dalam konteks
pemakai database. Saat kita menyatakan LOCK atau UNLOCK
suatu account pada dasarnya kita melakukan LOCK USER atau
UNLOCK USER.

User, Privilege dan Role 192


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

CREATE USER
Hanya dengan hak DBA saja yang bisa melakukan CREATE
USER.
Pertama anda connect sebagai pemakai dengan hak DBA
untuk melakukan langkah-langkah berikut ini. Kita mulai
dengan sintaks sederhana operasi CREATE USER.

CREATE USER user_name


IDENTIFIED EXTERNALLY | {by password}
[ DEFAULT TABLESPACE tablespace_name ]
[ TEMPORARY TABLESPACE tablespace_name ]
[ ACCOUNT {LOCK|UNLOCK}];

Contoh :
CREATE USER scott2
IDENTIFIED BY tiger
DEFAULT TABLESPACE mahasiswa
TEMPORARY TABLESPACE temp_ mahasiswa;

Pilihan diatas adalah pembuatan pemakai yang diautentifikasi


oleh password. Misalkan kita ingin membuat user scott3 yang
diidentifikasi secara external oleh OS. Sintaks yang lengkap
dapat dilihat dibuku manual ORACLE.
CREATE USER scott3
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE praktikum
TEMPORARY TABLESPACE temp_praktikum;

Sangat sulit mengecek effektifitas dan konsekuensi


autentikasi lewat cara ini.

User, Privilege dan Role 193


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

ALTER USER
Mengubah pemakai dilakukan dengan operasi ALTER USER.
Perubahan yang perlu biasanya mencakup perubahan
password, default tablespace, temporary tablespace, profile,
quota, dan status penguncian. Contoh berikut menyangkut
pengubahan pemakai, memaksa pemakai untuk mengubah
passwordnya.
ALTER USER scott2
IDENTIFIED BY peterpan
PASSWORD EXPIRE;

Pemanggilan operasi berikut merubah quota pemakai scott2


sehingga tidak bisa membuat objek di tablespace praktikum.
Perhatikan bahwa tidak ada penyebutan tipe TABLESPACE .

ALTER USER scott2


QUOTA 0 MON MAHASISWA;

DROP USER
Membuang pemakai dilakukan dengan operasi DROP USER.
Sintaksnya :
DROP USER user_name [CASCADE];

Aturannya sebagai berikut :


Jika pemakai tidak memiliki objek maka penyebutan CASCADE
tidak perlu dilakukan. Sekalipun CASCADE dispesifikasikan,
pembuangan pemakai bisa gagal yang disebabkan oleh :

i. Mencoba membuang pemakai/user SYS dan SYSTEM.


Hal ini disebakan karena kedua user ini tidak bisa dibuang.
ii. Mencoba membuang user yang masih connect ke
service.

Perhatikan bahwa tidak ada operasi untuk hanya membuang


obyek-obyek seorang pemakai tanpa membuang pemakai
tersebut. DBA harus menulis program khusus untuk hal itu.

User, Privilege dan Role 194


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

MONITORING USER
Berikut metadata views untuk memantau pemakai ;
iii. DBA_users : berisi informasi seluruh user yang
dimiliki oleh DBA
iv. DBA_TS_Quotas : berisi informasi tentang
tablespace quota bagi setiap pemakai.
v. V$session : untuk melihat user yang sedang
connect ke system
Coba lakukan perintah selectin berikut :
SELECT * FROM DBA_users;

Perintah diatas digunakan untuk menampilkan semua


informasi users yang dimiliki DBA
SELECT * FROM DBA_TS_Quotas;

Perintah diatas digunakan untuk menampilkan semua


informasi quota tablespace masing-masing user
SELECT * FROM V$session;

Perintah diatas digunakan untuk menampilkan semua user


yang connect ke system

PRIVILEGES

Salah satu model keamanan dalam penggunaan DBMS kita


adalah adanya privilege(hak). Model keamanan ini biasa
diapakai di OS(operating system) maupun server lainnya.

Operasi-operasi
Operasi-operasi untuk privilege terbatas pada GRANT dan
REVOKE. Operasi GRANT memberikan hak akses kepada satu
User, Privilege dan Role 195
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

atau lebih pemakai, sebaliknya operasi REVOKE membuang


hak akses dari satu atau lebih pemakai.
Apa saja hak-hak yang diperoleh seorang pemakai/user
apabila DBA memberi grant role connect dan resource, kita
bisa memberikan jawabannya dengan melihat metadata view
berikut.
1. connectlah sebagai DBA
2. jalankan perintah
DESCRIBE DBA_sys_privs;
SQL> set line 10;
SQL> desc dba_sys_privs; Name Null?
Type
----------------- -------- ------------
GRANTEE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)

SQL> SELECT * FROM DBA_SYS_PRIVS


WHERE grantee in (‘CONNECT’,’RESOURCE’)
ORDER BY grantee;

GRANTEE PRIVILEGE ADM


------------------------------ ---------------------------------------- ---
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
CONNECT CREATE DATABASE LINK NO
CONNECT CREATE SEQUENCE NO
CONNECT CREATE SESSION NO
CONNECT CREATE SYNONYM NO
CONNECT CREATE TABLE NO
CONNECT CREATE VIEW NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE TYPE NO

User, Privilege dan Role 196


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Scott berhak merubah session, membuat cluster, database


link, type, sequence, session, synonym, view, cluster,
indextype, operator, procedure, sequence, table, dan trigger.
Privilage terbagi menjadi dua jenis yaitu system-level dan
object-level. Kita akan pelajari keduanya. Sebelum itu mari
kita buat seorang user lagi.
CREATE USER scotti
IDENTIFIED BY tiger
DEFAULT TABLESPACE mahasiswa
TEMPORARY TABLESPACE temp_ mahasiswa;

GRANT conncet, resource to scotti;

System-level privileges
System level privilege tidak terkait dengan object tertentu
secara spesifik. Semua (15) privilege yang kita lihat diatas
adalah system level, tak terkait dengan suatu object tertntu
secara spesifik. Ada lebih dari 80 system level privilege dalam
oracle RDBMS. DBA berhak untuk men-drop user dan backup
tables.

Object-level privileges
Privilege ini terkait dengan object tertentu secara spesifik.
Misal user bernama scott9 memiliki dua object (bertipe sama
maupun bukan). Jika scott9 hanya memberi object level
privilege kepada scotti, maka scotti tak otomatis memiliki
object level privilege terhadap object yang satu lagi.
Mari kita lihat contoh dibawah
SQL> connect scott9
Enter password: *****
Connected.

SQL> create table satu(


a number,
b varchar(9));

Table created.

User, Privilege dan Role 197


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> insert into satu values(1,'x');

1 row created.

SQL> create table dua(


c number,
d varchar(9));

Table created.

SQL> insert into dua values(1,'x');

1 row created.

SQL> GRANT SELECT ON satu TO scotti;

Grant succeeded.

SQL> connect scotti@basdat/tiger;

Connected.

SQL> select * from scott9.satu;


A B
--------- ---------
1 x
2 y
SQL> select * from scott9.dua;
select * from scott9.dua
*
ERROR at line 1:
ORA-00942: table or view does not exist

Scotti dapat mengakses table satu milik scott9 tetapi tidak


bisa mengakses table dua milik scott9, karena scotti tidak
diberi akses oleh scott9 untuk mengakses table dua.

REVOKE PRIVILEGES
Sekarang kita akan mencoba mnghapus hak akses scotti
terhadap table satu. Ikuti langkah berikut :

User, Privilege dan Role 198


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1. masuk sebagai user scott9


2. jalankan perintah berikut

SQL> revoke select on satu from scotti;


Revoke succeeded.

3. masuk sebagai user scotti


4. jalankan selection terhadap table satu milik scott9

SQL> select * from scott9.satu;


select * from scott9.satu
*
ERROR at line 1:
ORA-00942: table or view does not exist

Terlihat bahwa revoke telah menghilangkan hak akses


terhadap suatu object.
Revoke hanya dapat dilakukan oleh pemberi hak akses.

Keamanan Privilege dan Roles


Sekarang kita akan melihat model keamanan yang melibatkan
privilege dan role. Untuk memudahkan pemahaman mari kita
lihat gambar berikut

PRIVILEGE ROLE USER


Granted to Granted to

Keterangan :
satu atau lebih privilege bisa di grant ke role
satu atau lebih role bisa digrant ke role
satu atau lebih role bisa di grant ke user

User, Privilege dan Role 199


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

satu atau lebih privilege bisa di grant ke user.

ROLES

Role adalah sekumpulan named set of privilege. Operasi-


operasi yang terdapat pada role adalah CREATE, ALTER, dan
DROP, satu operasi SET untuk pengaktifan ditambah dengan
dua operasi GRANT dan REVOKE (seperti untuk privilege). Role
dibuat untuk mempermudah pengelolaan privilege.

System Defined Role


DBMS Oracle menyediakan system defined role yang siap
dipakai

Role Kegunaan
CONNECT Lihat di bab sebelumnya
RESOURCE Lihat di bab sebelumnya
DBA Semua privilege dengan
ADMIN OPTION
EXP_FULL_DATABASE Export full database
IMP_FULL_DATABASE Import full database

Creating Roles
Membuat role dialakukan dengan operasi CREATE ROLE. Ada
syarat agar seorang pemakai dapat menggunakan hak
ini(membuat role), yaitu harus memiliki hak akses untuk
membuat role(CREATE ROLE). Secara default hak ini tidak
diberikan ke pemakai jadi DBA harus memberikan hak ini
secara explicit.

1. masukklan sebagai user anda


2. jalankan perintah berikut

SQL> CREATE ROLE mahasiswa;


Role created.

User, Privilege dan Role 200


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Operasi GRANT
Operasi GRANT dipakai untuk meng-assign privilege atau role
kepada role.
Pertama kita akan memberikan sebuah privilege kepada role
mhs_role berupa kemampuan untuk selection kepada table
mahasiswa.
SQL> grant select on mahasiswa to mhs_role;

Grant succeeded.

Kita akan memberikan role yang telah kita buat kepada


pemakai kita yaitu scotti.
Jalankan perintah SQL berikut
SQL> GRANT mhs_role to scotti;
Grant succeeded.

Memakai Roles
Untuk menggunakan role mhs_role tadi oleh scotti maka scotti
harus melakaukan SET terhadap role tersebut
SQL> set role mhs_role;

Role set.

SQL> select * from scott9.mhs;


NIM NAMA
----------- --------------------
30108001 paijo
30108002 paimen

Removing Roles
Operasi yang digunakan adalah REVOKE
1. masukklah sebagai scott9

User, Privilege dan Role 201


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2. jalankan SQL berikut

SQL> REVOKE mahasiswa from scotti;

Revoke succeeded.

3. masuklah sebagai scotti jalankan perintah berikut

SQL> connect scotti@basdat/tiger

Connected.

SQL> select * from scott9.mhs;


select * from scott9.mhs
*
ERROR at line 1:
ORA-00942: table or view does not exist

Mengubah Roles
Operasi ALTER ROLE diapakai untuk mengubah tingkat
kerahasiaan.
Sintaks :

ALTER :ROLE name {NOT IDENTIFIED | IDENTIFIED {BY


Contoh
ALTER ROLE |mhs_role
password NOT IDENTIFIED;
EXTERNALLY };
ALTER ROLE mhs_role IDENTIFIED BY SCOTT9;
ALTER ROLE mhs_role IDENTIFIED EXTERNALLY;

Membuang Roles
Sama seperti membuang table, index, type dan yang lainnya,
yaitu menggunakan operasi DROP.

SQL> connect scott9@basdat/tiger

Connected.

SQL> drop role mahasiswa;

User, Privilege dan Role 202


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Role dropped.

Perhatikan efeknya, hak hak yang diperoleh dalam role


tersebut akan hilang

SQL> connect scotti@basdat/tiger

Connected.

SQL> select * from scott9.mhs;


select * from scott9.mhs
*
ERROR at line 1:
ORA-00942: table or view does not exist

Untuk melihat role yang dimiliki anda bis amenjalankan


perintah SQL berikut

SQL > select * from role_sys_privs

ROLE PRIVILEGE AD
------------------ ------------------------------------- --------
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
CONNECT CREATE DATABASE LINK NO
CONNECT CREATE SEQUENCE NO
CONNECT CREATE SESSION NO
CONNECT CREATE SYNONYM NO
CONNECT CREATE TABLE NO
CONNECT CREATE VIEW NO
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE INDEXTYPE NO
RESOURCE CREATE OPERATOR NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE SEQUENCE NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE TYPE NO

16 rows selected.

User, Privilege dan Role 203


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Untuk melihat role yang sedang digunakan

SQL > select * from session_roles;


ROLE
------------------------------
CONNECT
RESOURCE

JURNAL
Dari studi kasus di modul yang pertama buatlah skema user
privileges dan role sebagai berikut:
1. Terdapat user biasa (pengunjung) yang dapat melihat
dan mencari katalog buku melalui aplikasi yang
disediakan (hanya dapat melakukan operasi select).
Terdapat user kasir yang otoritasnya hanya dapat
melihat data buku dan mengolah/memanipulasi data-
data transaksi.
2. Terdapat user administrasi logistik yang memiliki
otoritas penuh terhadap semua tabel kecuali tabel-
tabel transaksi.
3. Terdapat user manager yang hanya dapat melakukan
view ke semua tabel.

User, Privilege dan Role 204


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Terdapat user administrator yang memiliki akses


penuh ke semua tabel dan schema dan dapat
memberikan akses yang dimilikinya ke user yang lain.

User, Privilege dan Role 205


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

12 Backup and Recovery

Overview

Tujuan dari seorang administrator database ialah untuk


memastikan suatu database dapat digunakan dan tersedia
pada saat user membutuhkan. Sebagai support dari tujuan
tersebut, database administrator membutuhkan Backup dan
Recovery untuk menjaga available data

Tujuan

27. Mahasiswa memahami konsep dan terminologi Backup /


Recovery.
28. Mahasiswa dapat mengimplementasikan Backup /
Recovery.
29. Mahasiswa dapat meyelesaikan berbagai persoalan yang
terkait dengan Backup and Recovery.

Backup and Recovery 206


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Issue dari Backup dan Recovery bagi administrator database


yaitu:

 mengantisipasi terjadinya suatu failure pada


database

 meningkatkan mean time between failure

 mengurangi mean time to recover dan

 mengurangi terjadinya loss data

Backup berarti suatu kegiatan untuk menyimpan database


dalam bentuk datafile, control file dan archieve log ke dalam
media penyimpanan lain seperti disk atau tape. Sedangkan
Recovery merupakan suatu proses untuk mengupdate
database dengan file Backup yang telah disimpan terakhir
kalinya. Ada dua cara untuk melakukan Backup dan Recovery,
yaitu :

1. Physical Backup
Contohnya : RMAN Backup dan Restore
2. Logical Backup
Contohnya : Export dan Import, Flashback

Dalam melakukan backup dan Recovery pada oracle 10g,


disediakan tampilan web ( Enterprise Manager ) sehingga
memudahkan admin database untuk melakukan administrasi.
Berikut beberapa hal yang perlu dilakukan apabila akan
melakukan backup dan Recovery pada Enterprise Manager :

1. Konfigurasi setting backup dan kebijakan ( policy )


2. Menentukan DBID dan DB_UNIQUE_NAME
3. Melakukan backup seluruh database
4. Melakukan backup database dengan Strategi Oracle-
suggested
Backup and Recovery 207
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Melakukan restoring dan recovery database dengan


menggunakan strategi oracle-suggested
6. Flashback table
7. Flashback Drop
8. Mengatur backup

Konfigurasi Setting Backup dan Kebijakan ( policy )

Kita dapat mengkonfigurasi sejumlah setting dan


kebijakan ( policy ) tentang bagaimana cara untuk melakukan
backup, data yang akan di backup, bagaimana cara
penyimpanan file yang di backup, bagaimana untuk
melakukan restore, dan berapa lama backup akan disimpan di
Recovery area. Kita juga bisa mengkonfigurasi feature untuk
memperbaiki Perform ansi dari backup.

1. Klik Maintenance di halaman home Oracle Database

Backup and Recovery 208


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2. Pilih Backup Setting di bagian Backup/Recovery


Settings.

3. Arahkan ke host credential di halaman Backup Setting.


Kemudian masukkan username dan password system
operasi kita. Kemudian arahkan ke bagian disk
setting.
4. Terima nilai 1 di kolom parallelism di bagian disk
setting pada halaman device. Kolom lokasi disk Backup
diset kosong jadi untuk backup akan digunakan flash
Recovery area. Pilih backup set untuk tipe disk backup.
Kemudian klik test disk Backup.

Backup and Recovery 209


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Akan ada tampilan pesan bahwa test disk setting untuk


backup telah sukses.
6. Sekarang kita akan mengkonfigurasi settingan
kebijakan untuk backup. Klik policy untuk mengakses
halaman policy.
7. Pilih Automatically Backup untuk control file dan server
parameter file (spfile) dengan pengubahan struktur
database dan backup database.
8. Pilih optimize seluruh database dengan melewatkan
file yang sudah di backup.

Backup and Recovery 210


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

9. Pilih enable block change tracking for faster


incremental backup.

10. Masukkan nama untuk block change tracking file.


Kemudian arahkan ke bagian retention policy.
11. Pilih Retain Backup that are necessary for a Recovery
to any time within the asecified number of days (point-
in-time Recovery) dan terima jumlah harinya yaitu 31
hari.

Backup and Recovery 211


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

12. Klik ok. kemudian kita akan kembali ke halaman


Maintenance.

Menentukan DBID dan DB_UNIQUE_NAME

Jika kita kehilangan controlfile atau spfile database


kita, Enterprise Manager tetap dapat mengembalikan
database kita yang telah di backup, selama kita mengetahui
DB_UNIQUE_NAME dan DBID dari database kita. Berikut
langkah-langkah untuk mengetahui DB_UNIQUE_NAME :

1. Klik All initialization Parameters di bagian Instance di


halaman Administration
2. Masukkan ‘db_unique_name’ di kolom Filter pada
halaman property Current dan kemudian klik button Go

Backup and Recovery 212


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman berikutnya akan tampil hasil eksekusi diatas yang


menunjukkan db_unique_name di kolom nama dan
db_unique_name value yaitu orcl di kolom value

Backup and Recovery 213


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Berikut langkah-langkah untuk menentukan DBID :

1. Klik controlfiles di bagian storage pada halaman


administration.
2. Halaman control files muncul. Pilih property advanced.

Backup and Recovery 214


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Kolom database ID berisi nomor DBID.

Backup and Recovery 215


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Note : DBID harap diingat karena dibutuhkan untuk operasi


Recovery.

Melakukan Backup seluruh Database

Kita dapat melakukan backup seluruh isi database kita


dengan melakukan backup keseluruhan ( backup seluruh
datafile ). Hasil dari backup seluruh database kita akan
disimpan sebagai salinan gambar atau sebagai tumpukan
backup, tetapi di contoh yang lain isi dari seluruh database
akan direpresentasikan sama dengan control file, archieved
redo log dan server parameter file. Database akan dapat di
Recovery dengan file-file ini. Berikut langkah-langkah untuk
backup seluruh database :

1. Pada halaman Home pilih menu Maintenance.


2. Arahkan ke menu Backup/Recovery, dan pilih Schedule
Backup.
3. Halaman Schedule Backup muncul. Arahkan cursor ke
bagian Customized Backup. Pilih Whole Database dan
masukkan nama dan password di host credential.
Kemudian klik schedule customized backup.

Backup and Recovery 216


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Halaman Schedule Customized Backup : Options


muncul. Pilih Full Backup di bagian Backup Type.
Kemudian pilih Online Backup di bagian Backup Mode.
Pilih Back up all archieved logs on disk di bagian
Advanced. Klik Next.

Backup and Recovery 217


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Halaman Schedule Customized Backup : Settings


muncul. Pilih Disk atau Tape, terserah kita akan
membackup data dimana ( pada contoh ini kita
menggunakan disk sebagai tempat beackup ). Klik
Next.

Backup and Recovery 218


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Halaman Schedule Customized Backup : Schedule


muncul. Kita dapat mengubah atau membiarkan Job
Name dan Job Description. Pilih Immediately untuk
mengeksekusi tugas tersebut secepat mungkin atau
memasukkan waktu untuk mengeksekusi waktu pada
waktu tertentu. Kemudian Klik Next.

Backup and Recovery 219


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7. Halaman Schedule Backup : Review muncul. Klik


Submit Job.

8. Kemudian akan tampil pesan bahwa permintaan untuk


Submit telah sukses. Klik OK
Backup and Recovery 220
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Note : kita hanya bisa melakukan backup secara online jika


database kita berada pada mode archive

Melakukan Backup database dengan Strategi Oracle-


suggested

Strategi Backup Oracle-suggested ialah backup akan


menyalin gambaran database (image copy) dengan
menggunakan backup incremental RMAN. Oracle Enterprise
Manager akan menjadwalkan backup dengan RMAN. Berikut
langkah-langkah untuk mensetting Schedule Backup :

1. Pilih Schedule Backup di bagian Backup/Recovery


2. Halaman Schedule Backup muncul. Pilih Oracle-
suggested backup. Kemudian masukkan username dan
password di bagian host credentials. Klik Next.

Backup and Recovery 221


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Pilih disk sebagai tujuan dari tempat backup yang akan


kita coba. Kemudian klik Next.

4. Halaman Schedule Backup : Setup muncul. Baca


kembali informasinya klik Next

Backup and Recovery 222


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Halaman Schedule Backup : Schedule muncul. Baca


kembali informasinya dan sesuaikan tanggal dan waktu
sesuai keperluan kita. Kemudian Klik Next

6. Halaman Schedule Backup : Review muncul. Baca


kembali informasinya dan klik Submit Job.

Backup and Recovery 223


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7. Halaman Status akan muncul dengan sebuah pesan


yang menunjukkan bahwa job telah didaftarkan dengan
sukses. Kita dapat klik View Job untuk mengakses
halaman status job atau klik OK untuk melengkapi
operasi tersebut.
Note : backup dengan strategi Oracle-suggested dilakukan
secara incremental.

Melakukan Recovery Database Secara Keseluruhan

Berikut langkah-langkah untuk melakukan Recovery


Database secara keseluruhan :

Backup and Recovery 224


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

1. Pilih Maintenance pada menu halaman Home Enterprise


Manager.
2. Pilih Perform Recovery di bagian Backup/Recovery.
3. Halaman Perform Recovery muncul. Pilih Recover to the
current time or a previous point-in-time sebagai tipe
operasi. Masukkan username dan password di bagian
Host Credentials. Kemudian klik Perform Whole
Database

4. Halaman Recovery Wizard kemudian muncul dan


memberitahu jika instance akan di matikan (shutdown )
dan dihidupkan kembali (restarted). Klik Refresh untuk
lanjut menggunakan Recovery Wizard.

Backup and Recovery 225


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Kita kembali ke halaman Maintenance. klik Perform


Recovery. masukkan host credentials. klik Perform
Whole Database Recovery untuk merecovery database.

Backup and Recovery 226


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Halaman Perform Recovery : Point-in-time muncul. Pilih


Recover to the current time. Klik Next.

7. Halaman Perform Recovery : Rename muncul. Pilih “No.


Restore the files to the default location” jika itu pilihan
kita atau pilih “Yes. Restore the file to a new, commen
location” dan kemudian masukkan lokasinya. Klik Next.

Backup and Recovery 227


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

8. Halaman Perform Recovery : Review kemudian muncul.


Baca kembali informasi dan klik Submit.

9. Kemudian akan muncul pesan “Operation succeeded”.


Klik Ok.

Backup and Recovery 228


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Note : proses ini hanya dapat dilakukan jika spfile dan


controlfile tidak hilang atau rusak.

Flasback Tabel

Untuk dapat melakukan operasi flashback pada tabel,


maka harus dilakukan langkah-langkah berikut :

 Enable Row Movement


 Simulasikan User Error
 Melakukan flashback pada tabel

Enable Row Movement

Enable Row Movement dilakukan pada tabel-tabel


tertentu, misalnya kita memiliki tabel HR.REGIONS.

1. Klik Administration di halaman Oracle Database Home.


2. Halaman property Administration kemudian muncul.
Pilih Tables di bagian Schema.

Backup and Recovery 229


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Tables kemudian muncul. Masukkan HR di


bagian Schema dan Regions di kolom Object Name. klik
Go.

4. Tabel REGIONS kemudian terpilih di bagian Results. Klik


Edit.

5. Halaman Edit Table kemudian muncul. Klik tab Options.

Backup and Recovery 230


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Pilih Yes dari menu drop-down Enable Row Movement.


Klik Apply.

Backup and Recovery 231


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7. Kemudian kita akan menerima sebuah pesan yang


menyatakan bahwa tabel telah dengan sukses di modifikasi.
Kemudian pilih Tables.

Simulasikan User Error

Sekarang kita akan mensimulasikan error yang


disebabkan karena perubahan data di tabel regions.

1. Lihat data di tabel regions dengan membuka sql plus


dan mengeksekusi perintah berikut

Sqlplus HR/HR
col region_name format a30
select * from regions;

Backup and Recovery 232


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2. Simulasikan user error dengan mengeksekusi perintah


sql untuk mengganti nilai dari kolom region_name di
semua baris :
Update regions set region_name = “Oracle”;
Commit;

3. Lihat perubahannya dengan menuliskan perintah


Select * from regions;

Melakukan flashback pada tabel

Berikut langkah-langkah untuk melakukan flashback


pada tabel :

1. Pastikan bahwa REGIONS masih terpilih di daftar tabel.


Pilih Flashback Table dari menu drop-down. Klik Go.

Backup and Recovery 233


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2. Halaman Perform Recovery : Point-in-time kemudian


muncul. Pilih Flashback to a timestamp dan masukkan
tanggal dan waktu beberapa menit yang lalu. Klik Next.

Backup and Recovery 234


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Perform Recovery : Flashback Tables muncul.


Baca kembali informasi di halaman tersebut kemudian
klik Next.

Backup and Recovery 235


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Halaman Perform Recovery : Review muncul. Baca


kembali informasnya dan kemudian klik Submit.

Backup and Recovery 236


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Kita akan menerima konfirmasi bahwa tabel telah di


flashback. Klik Ok.
6. Sekarang pindah ke sesi sql*plus dan eksekusi perintah
untuk melihat operasi flashback tabel yang telah kita
lakukan :
Select * from regions;

Flashback Drop

Pada bagian ini kita akan menggunakan fitur flashback


drop untuk mengembalikan sebuah tabel yang telah di drop.
Sebagai latihan, akita akan membuat sebuah tabel,
menghapus tabel, kemudian mengembalikannya dengna
menggunakan flashback drop. Berikut langkah-langkah untuk
membuat tabel baru dan kemudian kita hapus tabel tersebut :

1. Masukkan HR di kolom Schema dan REGIONS di kolom


Object Name atau sebagian dari nama di kolom Object
Name dan klik Go.

Backup and Recovery 237


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

2. Pilih Create Like dari menu drop down actions. Klik Go.

Backup and Recovery 238


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman untuk membuat tabel kemudian muncul.


Masukkan REG_HIST di kolom nama. Jangan klik Not Null
pada kolom REGION_ID. Klik Constraints.

Backup and Recovery 239


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Halaman Constraints kemudian muncul. Hapus


constraint pada tabel dengan memilihnya satu-satu
kemudian klik delete.

5. Klik OK untuk membuat tabel REG_HIST.

Backup and Recovery 240


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Kita akan menerima pesan yang menyatakan bahwa


tabel telah dibuat. Kemudian masukkan REG_HIST ke
dalam kolom Object Name dan klik Go.

Backup and Recovery 241


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

7. Halaman Tables kemudian ditampilkan dengan tabel


REG_HIST di bagian Results. Klik Delete untuk
menghapus tabel REG_HIST.

8. Klik Yes untuk mengkonfirmasi penghapusan tabel.

Backup and Recovery 242


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

9. Kemudian dikeluarkan pesan yang menandakan bahwa


proses penghapusan tabel telah dieksekusi. Klik Go
untuk mencari tabel.
10. Tidak ada yang akan ditampilkan di bagian Result
Displayed in the results section.

Untuk mengembalikan tabel yang telah terhapus, kita


dapat melakukan flashback drop. Berikut langkah-
langkahnya :

1. Pilih Recycle Bin


2. Inputkan HR di kolom nama Schema dan klik Go.

Backup and Recovery 243


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Pilih tabel REG_HIST kemudian klik Flashback Drop.

Backup and Recovery 244


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Halaman Perform Recovery : Rename kemudian


muncul. Klik Next.

Backup and Recovery 245


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Halaman Perform Recovery : Rview kemudian muncul.


Baca kembali informasi tersebut kemudian klik Submit.

6. Kemudian akan muncul pesan konfirmasi. Klik Ok


7. Tabel tersebut tidak lagi berada di Recycle Bin. Klik
Tables.
8. Sekarang tabel REG_HIST telah ada di daftar tabel.

Backup and Recovery 246


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Mengatur Backup

Mengatur backup terdiri dari 2 tugas yaitu mengatur


backup file yang ada di disk atau tape, dan mengatur catatan
dari backup yang ada di RMAN Repository. Pada bagian ini,
kita akan melakukan maintenance pada backup dan meng-
update RMAN repository. Pada bagian ini kita akan melakukan
hal-hal berikut :

 Menggunakan halaman untuk mem backup database


yang ada pada waktu ini
 Backup crosschecking
 Menghapus backup yang sudah expired
 Menghapus backup yang Obsolete
 Menkitakan backup menjadi tidak ada (unavailable)

Backup and Recovery 247


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

 Membuat catalog untuk backup

Menggunakan halaman untuk membackup database


yang ada pada waktu sekarang

1. Klik Manage Current Backups pada bagian Maintenance


> Backup/Recovery.

2. Halaman Manage Current Backups muncul. Halaman


Backup Sets akan menunjukkan backup yang ada di
RMAN repository. Klik link di kolom Contents untuk
melihat detail informasi mengenai isi dari backup.

Backup and Recovery 248


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Contents kemudian muncul. Klik Manage


Currents Backups untuk kembali.

Backup and Recovery 249


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Klik Image Copies untuk melihat halaman Image Copies.

5. Halaman Image Copies kemudian memperlihatkan jika


image copies yang telah disimpan di RMAN repository.

Backup Crosschecking

Saat kita melakukan crosschecking sebuah backup,


RMAN akan memverifikasi bahwa informasi yang disimpan di
repository sesuai dengan yang ada di backup secara fisik. Jika
tidak sesuai, repository akan di update sesuai dengan status
yang ada sekarang. Kita dapat melakukan crosscheck seluruh
database kita dengan langkah-langkah berikut :

1. Klik Manage Backups di bagian Backup/Recovery


2. Halaman Manage Current Backups kemudian muncul.
Klik Crosscheck All dibagian kanan atas untuk
melakukan crosscheck semua file yang ada di RMAN
repository.
3. Halaman Crosscheck All : Specify Job Parameters
muncul. Kita dapat menerima nama job standard untuk

Backup and Recovery 250


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

nama job, deskripsi job, waktu mulai, dan ulangi


spesifikasinya atau masukkan nilai yang kita inginkan.
Klik Submit Job untuk memasukkan job untuk
crosscheck.

4. Sebuah pesan bahwa permintaan job telah sukses


kemudian ditampilkan. Kemudian klik View Job untuk
melihat status dari job tersebut.
5. Di bagian Summary, kita dapat melihat statu dari job.

Backup and Recovery 251


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Menghapus backup yang expired

1. Klik Manage Current Backups pada bagian


Backup/Recovery di halaman Maintenance.
2. Halaman Manage Current Backups muncul. Klik Delete
All Expired di atas halaman untuk menghapus RMAN
repository semua backup yang terdeteksi sebagai
backup yang usang.

Backup and Recovery 252


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Delete All Expired: Specify Job Parameters


kemudian muncul. Kita bisa membiarkan standar untuk
nama Job, deskripsi job, waktu mulai, dan spesifikasi
yang berulang atau memasukkan nilai tertentu. Pilih
Perform the operation ‘ Crosscheck All ’ before ‘Delete
All Expired’. Jika kita tidak melakukan operasi
crosscheck. Klik Submit Job untuk memasukkan job
tersebut.
4. Kemudian pesan yang mengatakan jika Job Submission
sukses ditampilkan. Kita dapat memilih View Job untuk
melihat status dari Job.

Backup and Recovery 253


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Pada bagian Summary, kita dapat melihat status dari


job.

Backup and Recovery 254


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Menghapus Backup yang usang ( Obsolete )

Backup yang using ( obsolete ) berarti file Backup


sudah tidak layak untuk digunakan dalam melakukan
Recovery. Untuk dapat menghapus Backup yang obsolete
berikut langkah-langkah nya :

1. Klik Manage Current Backups di bagian Backup/Recovery


pada halaman Maintenance.

2. Halaman Manage Current Backups muncul. Klik Delete


All Obsolete di bagian kanan atas halaman untuk
membuang backup yang tidak terpakai dari RMAN
repository yang tidak terpakai.

Backup and Recovery 255


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Delete All Obsolete: Specify Job parameters


kemudian muncul. Kita dapat menerima standar untuk
nama Job, deskripsi Job, waktu mulai dan spesifikasi
yang diulang-ulang atau masukkan nilainya sendiri. Klik
Submit Job untuk mendaftar job tersebut.

4. Kemudian akan muncul pesan konfirmasi bahwa


pendaftaran job telah sukses didaftarkan dan kemudian
ditampilkan pada halaman Manage Current Backups.
Kita dapat memilih View job untuk melihat status dari
job.

Backup and Recovery 256


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

5. Di bagian Summary kita dapat melihat status job.

Backup and Recovery 257


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Kembali ke halaman Image Copies atau Backup Sets


untuk memastikan bahwa Backup yang usang telah
dihapus.

Menandakan Backup menjadi tidak ada ( unavailable )

Untuk dapat menandakan backup menjadi tidak ada


( unavailable ) maka dapat dilakukan langkah-langkah berikut
:

1. Klik Manage Current Backups di bagian Backup/Recovery


pada halaman Maintenance.
2. Halaman Manage Current Backups muncul. Pilih Backup
yang akan kita tandai sebagai UNAVAILABLE dan klik
Change to Unavailable.

Backup and Recovery 258


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Sebuah halaman akan ditampilkan. Klik Yes untuk


melanjutkan operasi.
4. Halaman permintaan sedang dalam keadaan progress
ditampilkan.

Membuat Katalog untuk Backup

Kita dapat mengklasifikasikan backup dengan perintah


system operasi sehingga RMAN dapat menggunakan mereka
dalam sebuah operasi Recovery. Sebagai contoh, disini kita
akan melakukan backup datafile yang termasuk ke dalam
contoh table space dengan menggunakan perintah system
operasi. Kemudian kita bisa mengklarifikasikan file backup di

Backup and Recovery 259


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

RMAN repository dengan menggunakan Enterprise Manager.


Berikut langkah-langkahnya :

1. Buka SQL*Plus dan login sebagi user dengan hak akses


sebagai SYSDBA. Disini kita diberikan pilihan untuk
melakukan backup online pada sebuah tablespace.
Missal dilakukan backup pada tablespace example.

2. Kembali ke promt system operasi dan buatlah sebuah


salinan system dan membuat salinan dari datafile yang
termasuk ke dalam directory baru yaitu backup. Kita
dapat menggunakan directory lain terserah keinginan.

3. Ambil contoh table space yang akan melakukan online


backup dengan mengunakan perintah di bawah ini :

Backup and Recovery 260


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. Sekarang kita lakukan catalog backup di RMAN


repository dengan menggunakan Database Control
Enterprise Manager. Klik Manage Current Backups di
bagian Backup/Recovery pada halaman Maintenance.
5. Pilih Catalog Additional Files pada bagian kanan atas
halaman

Backup and Recovery 261


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

6. Pilih “Catalog files in the specified disk location into the


Recovery Manager repository” dan masukkan lokasi dan
nama dari backup file. Klik Ok.

7. Halaman progress untuk permintaan ditampilkan.


8. Sebuah pesan konfirmasi menyatakan jika file telah
dikatalog-kan.

JURNAL
1. Buatlah sebuah database dengan nama sesuai nim
anda, kemudian bikin tabel dan diisi sesuai studi kasus
pada bab sebelumnya . lakukan strategi fullbackup
terhadap database anda.
2. Dari database yang telah anda bikin, lakukan operasi
flashback tabel.
3. Recover seluruh database anda mengunakan strategi
full recovery.
4. Cari cara bagaimana melakukan backup dan recovery
menggunakan perintah RMAN (console based)?

Backup and Recovery 262


Politeknik Telkom Praktikum Sistem Manajemen Basis Data

13 Monitoring and Resolving Lock


Conflicts

Overview

Memungkinkannya transaksi dapat dilakukan secara konkuren


menimbulkan suatu permasalahan tentang pengaturan
resource. Dalam pengaturan resource dibutuhkan suatu lock
agar si pengakses data tidak mengalami interupt dari
transaksi lain.

Tujuan

30. Mahasiswa memahami konsep Locking pada Oracle.


31. Mahasiswa memahami cara mendeteksi lock conflicts.
32. Mahasiswa mampu mengatasi deadlock.

LockHandling 263
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Locks

Istilah lock pada database berarti suatu kunci atau


penguncian. Lock digunakan pada saat terjadi pengaksesan
database oleh user secara bersamaan. Hal ini ditujukan untuk
menjaga data agar tidak corrupt / hilang atau data yang tidak
valid pada saat banyak user mengakses database secara
bersamaan / konkuren. Sebelum database mengijinkan
suatu sesi user untuk memodifikasi data, pertama-tama sesi
me-lock data yang akan dimodifikasi. Lock memberikan
exclusive control terhadap suatu data pada sebuah sesi
sehingga tidak akan ada transaksi lain yang dapat
memodifikasi data yang ter-lock sampai lock terhadap data
tersebut telah di lepas. Transaksi dapat melakukan lock

 pada sebuah row data dari suatu tabel,


 multiple row data dari suatu tabel, atau
 satu tabel itu sendiri yang di lock.

Oracle 10g memiliki mekanisme lock secara manual dan


otomatis.

Ada dua mekanisme untuk melakukan locking data pada


database yaitu :

1. Pessimistic Locking

Proses locking yang terjadi pada saat lock di request


maka record atau table akan di lock secara
immediate / langsung.

2. Optimistic Locking

LockHandling 264
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Proses locking yang terjadi pada saat suatu record /


data pada database dilakukan suatu perubahan /
update.

Locking Mechanism

Locking mekanisme di disain untuk menyediakan


derajat konkurensi yang tinggi yang terjadi pada database.
Suatu transaksi yang memodifikasi data memperoleh row-
level locks daripada table-level locks. Proses query pada suatu
data tidak membutuhkan mekanisme lock terhadap data yang
di query, sebuah query tetap berhasil dieksekusi pada suatu
data atu tabel walaupun ada user yang member lock pada
stuatu data atau tabel. Pada saat multiple transaksi
membutuhkan suatu lock pada resource yang sama, transaksi
yang pertama meminta lock pada suatu resource tersebut.
Transaksi yang lainnya berada pada fase menunggu di antrian
sampai transaksi yang pertama telah selesai mengeksekusi
resource. Mekanisme antrian ini bersifat otomatis dan tidak
membutuhkan interaksi dari suatu administrator atau user
yang lain.
Semua lock di lepas pada saat transaksi berakhir.
Transaksi dikatakan selesai / complete apabila perintah
commit atau rollback dilaksanakan. Pada kasus transaksi yang
failed, baground proses secara otomatis melakukan rollback
kegagalan yang terjadi dengan merubah transaksi yang gagal
tersebut menjadi ke posisi save point atau sebelum proses
transaksi gagal.

Data Concurrency

LockHandling 265
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Mekanisme lock secara default berada pada row-level


locking mode. Transaksi yang berbeda dapat mengupdate row
data yang berbeda yang berada pada sebuah tabel yang
sama tanpa bertentangan antara yang satu dengan yang lain.
Sementara default model lock berapada pada row-level,
Oracle Database 10g mensupport manual locking konfigurasi
pada level yang lebih tinggi. Berikut contoh locking suatu
tabel

Dengan statement diatas, transaksi yang lain yang mencoba


untuk meng-update data pada tabel yang sudah di lock
( karyawan ) harus menunggu pada antrian sampai transaksi
yang mempunyai lock pada tabel tersebut telah selesai
( commit ).

Sesi 1 : locking table karyawan in exclusive mode

Sesi 2 : waiting to update table karyawan.

SQL > LOCK TABLE karyawan IN EXCLUSIVE MODE;

LockHandling 266
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sesi 1 : commit ( transaksi telah berakhir dan locking


terhadap tabel karyawan di release )

LockHandling 267
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sesi 2 : traksaksi update success

EXCLUSIVE lock adalah lock yang paling tinggi derajatnya.


Berikut ini beberapa lock mode yang ada pada Oracle :

1. ROW SHARE
Mengijinkan konkuren akses / akses secara bersama-
sama pada tabel yang di lock, tetapi user yang lain
tidak dapat member lock exclusive pada tabel yang
diberi share lock sampai share lock di lepas. user yang
tidak melakukan lock pada tabel, masih dapat
mengakses data.

2. ROW EXCLUSIVE
Sama dengan ROW SHARE, tetapi tidak diperbolehkan
user lain untuk memberi SHARE mode sebelum lock
sudah di lepas.Terjadi secara otomatis pada saat
terjadi updating, inserting, atau deleting suatu data.

3. SHARE
Mengijinkan proses query yang konkuren / bersama-
sama tetapi tidak diperbolehkan untuk mengubah

LockHandling 268
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL > LOCK TABLE nama_tabel IN mode_lock NOWAIT;


mode lock tabel. SHARE lock dibutuhkan ( dan secara
otomatis diminta ) untuk membuat index pada tabel.

4. SHARE ROW EXCLUSIVE


Digunakan untuk melakukan query pada keseluruhan
data pada tabel dan memberi akses kepada sesi user
lain untuk melakukan query pada tabel tetapi tidak
diperbolehkan sesi user yang lain untuk memberi lock
pada tabel serta tidak diperbolehkan untuk
mengupdate data pada tabel.

5. EXCLUSIVE
Mengijinkan sesi user yang lain untuk melakukan query
pada tabel yang di lock tetapi tidak diperbolehkan
melakukan suatu aktivitas yang lain selain query pada
tabel tersebut. Exclusive lock dibutuhkan pada saat
proses drop suatu tabel.

Seperti beberapa permintaan untuk lock, eksekusi statement


lock secara manual terdapat antrian sampai sesi statement
yang lain telah memiliki lock, atau telah melepas lock.
perintah LOCK dapat menerima special argument untuk
mengontrol proses menunggu yaitu menggunakan NOWAIT.

NOWAIT mengembalikan control kepada sesi yang meminta


lock secara langsung jika tabel yang ingin di lock telah di lock
oleh sesi user yang lain.

Sesi 1 melakukan lock tabel karyawan pada mode row


share

LockHandling 269
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sesi 2 ingin melakukan lock pada tabel karyawan


tetapi di tolak

LockHandling 270
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

DML Locks

Setiap transaksi DML terdapat 2 lock :


1. Row exclusive lock pada sebuah data atau banyak data
yang sedang di update.
Hal ini akan menjadi row exclusive lock berdasarkan
pada jumlah data yang diupdate.
2. Shared table level lock pada tabel yang sedang di
update.
Hal ini mencegah sesi user lain untuk melakukan lock
keseluruhan tabel ( kemungkinannya untuk drop tabel
atau truncate data tabel ) sementara perubahan
sedang terjadi.

Enqueue Mechanism ( mekanisme antrian )

Permintaan suatu lock secara otomatis akan di


masukkan ke dalam antrian. Setelah suatu transaksi yang
memegang lock telah selesai, maka sesi berikutnya yang

LockHandling 271
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

telah mengantri terlebih dahulu akan mendapatkan lock.


suatu sesi yang sedang memegang lock pada suatu data atau
tabel dapat me-request untuk mengubah mode lock yang
sedang terjadi tanpa harus melepas sesi lock dan kembali ke
antrian. Sebagai contohnya, misalkan terdapat sebuah sesi
yang memegang mode shared lock pada suatu tabel. Sesi
tersebut dapat merubah dari shared lock ke exclusive lock,
selama tidak ada sesi lain yang sedang memiliki exclusive
lock atau share lock pada tabel tersebut. Maka sesi yang
memegang shared lock akan di beri grant / hak akses untuk
mendapatkan exclusive lock tanpa harus menunggu di antrian
terlebih dahulu.

Lock Conflicts

Konflik pada suatu transaksi database sering terjadi,


tetapi pada umumnya dapat di selesaikan berdasarkan
periode waktu dan mekanisme antrian. Ada suatu kasus yang
sangat jarang terjadi lock konflik dibutuhkan konfigurasi dari
administrator untuk menyelesaikan konflik. Berikut contoh
konflik yang jarang terjadi :
LockHandling 272
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Transaction 1 Time Transaction 2


UPDATE 9:00:0 UPDATE
hr.employees 0 hr.employees
SET SET
salary=salary salary=salary+
+100 WHERE 100 WHERE
employee_id= employee_id=1
100; 01;
1 row updated. 1 row updated.
UPDATE 9:00:0 SELECT sum(salary)
hr.employees 5 FROM
SET hr.employees;
COMMISION_P SUM(SALARY)
CT=2 WHERE ---------------------
employee_id= 895463
101;
Sesi menunggu
karena terjadi
lock konflik.
Sesi masih 16:30: Terjadi transaksi
menunggu di 00 yang banyak
antrian!! dalam waktu
7.5 jam, tetapi
belum ada
commit atau
rollback
1 row updated. 16:30: Commit;
01

pada kasus diatas, transaksi 2 mendapatkan lock single row


pada jam 9:00:00 dan tidak melakukan commit. Di sisi lain
transaksi 1 menunggu untuk proses update pada tabel, tetapi
transaksi 2 pada saat itu membutuhkan lock pada semua
data. Sehingga transaksi 1 di block oleh transaksi 2 sampai
transaksi 2 commit pada jam 16:30:01. Untuk hal ini user
yang mengeksekusi transaksi 1 menghubungi administrator
untuk mengatasi permasalahan ini.

LockHandling 273
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Detecting Lock Conflicts

Pada oracle 10g untuk mendeteksi lock konflik kita


dapat menggunakan Enterprise Manager. Berikut langkah-
langkah mendeteksi lock. Misal sebelumnya sudah ada
transaksi berikut :
Sesi 1 lock tabel karyawan

Sesi 2 update tabel karyawan

LockHandling 274
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Sesi 3 insert tabel karyawan

1. Pada Enterprise Manager buka halaman Performance


2. Klik Blocking pada bagian kiri bawah halaman.

LockHandling 275
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

3. Halaman Blocking Sessions muncul. Terdapat tiga sesi


user yang sedang mengalami konflik.

LockHandling 276
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Resolving Lock Conflicts

Untuk menyelesaikan lock konflik, suatu sesi yang


memegang lock harus di lepaskan. Ada beberapa cara untuk
menyelesaikan masalah lock konflik, cara yang paling baik
ialah dengan cara member tahu si user yang sedang
memanipulasi data untuk melakukan commit atau rollback
terhadap transaksi yang sedang dijalankan. Jika terjadi suatu
keadaan yang mendesak, penyelesaian lock konflik
memungkinkan administrator untuk men-terminasi sesi user
yang sedang memegang lock dengan cara meng-klik tombol
Kill Session. Saat suatu sesi di terminate / di stop, semua
transaksi yang sedang terjadi pada sesi akan di rollback. User
yang sesinya di terminate harus login terlebih dahulu untuk
melakukan transaksi yang telah di terminate.
Berikut langkah-langkah untuk men-terminate sesi user :

LockHandling 277
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

4. pada halaman Blocking Sessions, pilih sesi user yang


akan di terminate. Kemudian klik Kill Session.
5. Pesan konfirmasi muncul, pilih kill Immediete.
Kemudian klik Yes.

6. Pada sisi user yang di-terminate akan muncul pesan


your session has been killed dan transaksi secara
otomatis mengalami rollback.

LockHandling 278
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Deadlocks
Deadlock merupakan contoh lock konflik yang sangat special.
Deadlock terjadi pada saat terdapat dua atau lebih sesi yang
sedang saling menunggu antar satu sama lain untuk
mendapatkan hak atas lock. dikarenakan sesi antar satu
dengan yang lain saling menunggu dan tidak dapat
menyelesaikan transaksi masing-masing maka akan
terdeteksi sebagai deadlock.

Transaksi 1 Time Transaksi 2


UPDATE karyawan 9:00 UPDATE karyawan
SET nama = SET nama =
‘paijo’ ‘paimin’
WHERE WHERE
employee_id employee_id
= 400; = 300;
UPDATE karyawan 9:15 UPDATE karyawan
SET nama = ‘paul’ SET nama =
WHERE ‘gilbert’
employee_id WHERE
= 300; employee_id
= 400;

LockHandling 279
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Oracle secara otomatis mendeteksi dan menyelesaikan


deadlock dengan cara me-rollback semua transaksi yang
sedang mengalami deadlock

JURNAL

1. Coba buat suatu kasus yang menunjukkan suatu


kondisi deadlock
2. Bagaimana tahap-tahap penyelesaian lock konflik
3. Buatlah suatu kasus yang menunjukkan lock terjadi
hanya pada suatu row
4. Buatlah suatu kasus yang menunjukkan lock terjadi
hanya pada suatu tabel

LockHandling 280
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

14 TUNING

Overview

Dalam penggunaan oracle, selain dibutuhkan


keakuratan data, performansi dari system database itu sendiri
juga sangatlah penting. Salah satu hal yang mampu
mendukung performansi system yang baik adalah dengan
teknik Tuning. Khusus pada oracle 10g, bab ini akan
memaparkan sedikit banyak mengenai pengertian tuning dan
bagaimana tuning dioperasikan menggunakan methodology
dengan memanfaatkan design yang sudah disediakan oleh
oracle tersebut.

Tujuan

33. Mengenal Tuning pada Oracle 10g


34. Memahami Instance Tuning
35. Memahami SQL Tuning

Tuning 281
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL Tuning

Bagian terpenting pada tuning performansi database system


adalah Tuning SQL statements. Adapun pada tuning SQL
terdapat tiga langkah dasar :
1. Identifikasi SQL statements yang memegang andil
besar pada sharing workload aplikasi dan system
resources, dengan me-review history SQL execution
yang telah lampau yang tersedia pada system.
2. Verifikasi bahwa execution plans yang diproduksi oleh
query optimizer untuk statement-statement ini
berjalan dengan baik.
3. Mengimplementasi corrective actions untuk men-
generate execution plans pada peformansi SQL
statement yang buruk sehingga menjadi lebih baik.

Ketiga langkah di atas diulang sampai performansi system


mencapai tingkat kepuasan atau tidak ada lagi statement
yang dapat di-tuning

Tujuan
Tujuan dari tuning sistem adalah untuk mengurangi waktu
respon sistem terhadap end user, atau untuk mengurangi
resource yang digunakan untuk memproses pekerjaan yang
sama. Kita dapat memenuhi kedua tujuan ini dalam beberapa
cara:
 Mengurangi Beban Kerja (Reduce the Workload)
 Menyeimbangkan Beban Kerja (Balance the Workload)
 Memparalelkan Beban Kerja (Parallelize the Workload)
a. Mengurangi Beban Kerja (Reduce the Workload)
SQL Tuning secara umum melibatkan pencarian cara yang
lebih efisien untuk memproses beban kerja yang sama. SQL
tuning memungkinkan untuk mengubah rencana eksekusi dari
suatu statement tanpa mengubah fungsionalitas untuk

Tuning 282
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

mengurangi pemakaian resource.Dua contoh bagaimana


penggunaan resource dapat dikurangi:
1. Jika suatu query yang biasa dieksekusi perlu untuk
mengakses suatu persentase kecil dari data dalam
tabel, maka query tersebut dapat dieksekusi dengan
lebih efisien dengan menggunakan indeks. Dengan
membuat indeks, kita dapat mengurangi jumlah
pemakaian resource.
2. Jika seorang user mencari dua puluh baris pertama
dari 10000 baris yang diberikan oleh perintah
pengurutan yang spesifik, dan jika query (dan perintah
pengurutan) dapat dipenuhi oleh indeks, maka user
tidak perlu untuk mengakses dan mengurutkan 10000
baris untuk melihat dua puluh baris.

b. Menyeimbangkan Beban Kerja (Balance the


Workload)
Sistem cenderung memiliki penggunaan penuh pada siang
hari ketika user yang sebenarnya terhubung ke sistem dan
penggunaan yang sedikit di malam hari. Jika noncritical report
dan batch job dapat dijadwalkan untuk berjalan pada malam
hari dan penggunaan sistem pada siang hari dikurangi, maka
hal tersebut dapat membebaskan resource agar dapat
digunakan pada program-program yang lebih penting pada
siang hari.

c. Memparalelkan Beban Kerja (Parallelize the


Workload)
Query-query yang mengakses sejumlah besar data (typical
data warehouse queries) sering dapat diparalelkan. Hal ini
sangat berguna untuk mengurangi waktu respon dalam data
warehouse yang rendah konkurensinya. Akan tetapi, untuk
lingkungan OLTP, yang cenderung tingggi konkurensinya, hal
ini dapat merugikan user-user lain dengan meningkatkan
penggunaan resource secara keseluruhan pada program.

EXPLAIN PLAN
Explain plan adalah suatu perintah yang digunakan untuk
menampilkan perintah eksekusi suatu query.

Tuning 283
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Query yang dioperasikan yang didukukng oleh explain plan


adalah :
 SELECT
 INSERT
 UPDATE
 DELETE
Dengan memanfaatkan explain plan kita bisa melihat langkah
eksekusi yang diambil oleh oracle, sehingga kita bisa
meningkatkan performansi query kita.
Optimizer mengambil informasi tentang obyek dan tipe dari
query yang dijalankan, kemudian memberikan keputusan
bagaimana suatu query akan dieksekusi.

ANALYZE
Selalu jalankan command ANALYZE pada table anda untuk
memberikan kepastian kalau optimizer akan memperoleh
informasi tentang data tersebut. Anda dapat melakukan
ANALYZE sebuah table, index, dan bahkan cluster. Ketika anda
melakukan analyze suatu table maka oracle akan mengambil
informasi berupa data dari obyek tersebut dan informasi
untuk memferifikasi blok. Ini adalah perintah yang sangat
berguna bukan Cuma untuk memproteksi data, tetapi juga
untuk meningkatkan performansi.

SINTAKS ANALYZE
ANALYZE (INDEX | TABLE | CLUSTER)
[USER.] (INDEX [PARTITION (PARTITION NAME) ]
| TABLE [PARTITION (PARTITION NAME)]
| CLUSTER )
( COMPUTE STATISTIC [ FOR CLAUSE]
| ESTIMATE STATISTIC [FOR CLAUSE]
[SAMPLE INTEGER (ROWS |
PERCENT)]
| DELETE STATISTIC
| VALIDATE REF UPDATE
| VALIDATE STRUCTURE [CASCADE]
| LIST CHAINED ROWS [INTO [USER.] TABLE]
)

Tuning 284
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

CONTOH ANALYZE
Berikut contoh aplikasi analyze :
 Pertama buat table emp
SQL> create table emp(
a number,
b varchar(10));
Table created.
 Kemudian masukkan sebuah data
SQL> insert into emp values(1,'hallo');
1 row created.
 Lakukan ANALYZE, eksekusi analyze dibawah adalah
untuk melakukan validasi terhadap structure table
emp.
SQL> analyze table emp validate structure cascade

PLAN TABLE
Sebelum anda bisa menjalankan explain plan anda harus
membuat table yang menampung output. Table harus dibuat
untuk schema anda sendiri. Table tersebut adalah
PLAN_TABLE. Sintaks pembuatan plan_table sudah tersedia di
system anda.
 Buka file UTLXPLAN.SQL di %Oraclehome
%/rdbms/admin/utlxplan.sql
Berikut sintaksnya :
rem
rem $Header: utlxplan.sql 08-may-2004.12:53:19 bdagevil
Exp $ xplainpl.sql
rem
Rem Copyright (c) 1988, 2004, Oracle. All rights reserved.
Rem NAME
REM UTLXPLAN.SQL
Rem FUNCTION
Rem NOTES
Rem MODIFIED
Rem bdagevil 05/08/04 - add other_xml column
Rem bdagevil 06/18/03 - rename hint alias to
object_alias
Rem ddas 06/03/03 - increase size of hint alias
column
Rem bdagevil 02/13/03 - add plan_id and depth

Tuning 285
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

column
Rem ddas 01/17/03 - add query_block and
hint_alias columns
Rem ddas 11/04/02 - revert timestamp column to
DATE (PL/SQL problem)
Rem ddas 10/28/02 - change type of timestamp
column to TIMESTAMP
Rem ddas 10/03/02 - add estimated_time column
Rem mzait 04/16/02 - add row vector to the plan
table
Rem mzait 10/26/01 - add keys and filter
predicates to the plan table
Rem ddas 05/05/00 - increase length of options
column
Rem ddas 04/17/00 - add CPU, I/O cost,
temp_space columns
Rem mzait 02/19/98 - add distribution method
column
Rem ddas 05/17/96 - change search_columns to
number
Rem achaudhr 07/23/95 - PTI: Add columns
partition_{start, stop, id}
Rem glumpkin 08/25/94 - new optimizer fields
Rem jcohen 11/05/93 - merge changes from branch
1.1.710.1 - 9/24
Rem jcohen 09/24/93 - #163783 add optimizer
column
Rem glumpkin 10/25/92 - Renamed from XPLAINPL.SQL
Rem jcohen 05/22/92 - #79645 - set node width to
128 (M_XDBI in gendef)
Rem rlim 04/29/91 - change char to varchar2
Rem Peeler 10/19/88 - Creation
Rem
Rem This is the format for the table that is used by the
EXPLAIN PLAN
Rem statement. The explain statement requires the
presence of this
Rem table in order to store the descriptions of the row
sources.

create table PLAN_TABLE (


statement_id varchar2(30),
plan_id number,
timestamp date,
remarks varchar2(4000),

Tuning 286
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

operation varchar2(30),
options varchar2(255),
object_node varchar2(128),
object_owner varchar2(30),
object_name varchar2(30),
object_alias varchar2(65),
object_instance numeric,
object_type varchar2(30),
optimizer varchar2(255),
search_columns number,
id numeric,
parent_id numeric,
depth numeric,
position numeric,
cost numeric,
cardinality numeric,
bytes numeric,
other_tag varchar2(255),
partition_start varchar2(255),
partition_stop varchar2(255),
partition_id numeric,
other long,
distribution varchar2(30),
cpu_cost numeric,
io_cost numeric,
temp_space numeric,
access_predicates varchar2(4000),
filter_predicates varchar2(4000),
projection varchar2(4000),
time numeric,
qblock_name varchar2(30),
other_xml clob
);

 Jalankan UTLXPLAN.SQL anda pada sqlplus

OPERASI
Sekali plan_table telah terbentuk anda bisa melakukan
explain plan terhadap query yang kita lakukan.
Lihat langkah berikut :
 Buat plan.sql
SQL> set serveroutput on;
SQL> @plan;
SP2-0310: unable to open file "plan.sql"

Tuning 287
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

SQL> column query_plan format a80


SQL> select
lpad(' ',2*level)||
operation||
':'||
options||
':'||
object_name query_plan
from plan_table
connect by prior id=parent_id
start with id=0;

QUERY_PLAN
----------------------------------------------
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP

SQL> save plan

Created file plan


 Jalankan query berikut :
SQL> explain plan for
select * from emp;
Explained.

SQL> @plan;
QUERY_PLAN
----------------------------------------------
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP

6 rows selected.
 Perintah plan.sql menghasilkan proses yang dilakukan
oleh oracle untuk operasi query kita.
Operasi table acces full emp mendeskripsikan kalo operasi
yang dilakukan adalah proses membaca record secara
keseluruhan.
Untuk opsi lain lihat explain plan berikut :
SQL> select * from emp;

Tuning 288
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

A B
--------- ----------
1 hallo

SQL> insert into emp values(2,'nama saya');


1 row created.

SQL> explain plan for


2 select * from emp where a=2;
Explained.

SQL> @plan;
QUERY_PLAN
---------------------------------------------------------
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
TABLE ACCESS:FULL:EMP
12 rows selected.

SQL> Alter table emp


add constraint pk_emp primary key(a);
Table altered.
SQL> commit;
Commit complete.
SQL> select * from emp where a=2;
A B
--------- ----------
2 nama saya

SQL> explain plan for


select * from emp where a=2;
Explained.
SQL> @plan;
QUERY_PLAN

Tuning 289
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

-------------------------------------------
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:BY INDEX ROWID:EMP
INDEX:UNIQUE SCAN:PK_EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:BY INDEX ROWID:EMP
INDEX:UNIQUE SCAN:PK_EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP

QUERY_PLAN
-------------------------------------------
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:BY INDEX ROWID:EMP
INDEX:UNIQUE SCAN:PK_EMP
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:FULL:EMP
INDEX:UNIQUE SCAN:PK_EMP
TABLE ACCESS:BY INDEX ROWID:EMP
INDEX:UNIQUE SCAN:PK_EMP
36 rows selected.

Dari perintah diatas terlihat perbedaan antara penggunaan


primary key dengan tidak. Anda jangan terkecoh dengan

Tuning 290
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

panjangnya hasil dari explain plan hasil selection setelah


pemberian primary key. Tapi pemberian primary key tersebut
merupakan sebuah peningkatan performansi pada hasil query
kita (terutama jika data besar).

Reviewing the Execution Plan


Ketika kita melakukan tuning (atau writing) sebuah SQL
statement pada lingkungan OLTP, tujuannya adalah untuk
beralih dari tabel yang memiliki filter yang paling selektif. Ini
berarti bahwa ada beberapa baris yang bergabung. Periksa
untuk memastikan bahwa jalur pengaksesan telah optimal.

Ketika memeriksa rencana eksekusi optimizer, lihatlah yang


berikut ini:

 Rencana seperti tabel driving memiliki filter terbaik


 Perintah join pada tiap langkah berarti bahwa angka
terkecil pada baris dikembalikan pada langkah
selanjutnya (yaitu, perintah join harus merefleksikan,
ketika memungkinkan, mengarah filter terbaik yang
belum terpakai).

 Metode join sesuai dengan jumlah baris yang


dikembalikan. Sebagai contoh, loop bersarang
bergabung melalui indeks mungkin tidak optimal
ketika banyak baris dikembalikan.

 View digunakan secara efisien. Lihat pada urutan


SELECT untuk melihat apakah pengaksesan ke view
penting.

 Ada beberapa produk Cartesian yang tidak penting


(bahkan dengan tabel kecil).

 Setiap tabel diakses secara efisien:

Pertimbangkan predikat-predikat pada SQL statement dan


jumlah baris pada tabel. Lihat pada aktivitas yang
Tuning 291
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

mencurigakan, seperti scan tabel secara penuh dengan


sejumlah besar baris, yang memiliki predikat pada klausa
where. Tentukan mengapa sebuah indeks tidak digunakan
untuk predikat selektif.

Sebuah scan tabel secara penuh tidak berarti tidak efisien.


Hal tersebut mungkin efisien untuk melakukan scan tabel
penuh pada tabel kecil, atau untuk melakukan scan tabel
penuh untuk membuat metode join yang lebih baik (misalnya,
hash join) untuk sejumlah baris yang dikembalikan.

Jika ada dari kondisi-kondisi ini yang tidak optimal, maka


pertimbangkan untuk merestrukturisasi SQL statement atau
indeks-indeks yang tersedia pada tabel.

Rekstruturisasi SQL Statement


Seringkali, menulis ulang SQL statement yang tidak efisien
lebih mudah daripada dimodifikasi. Jika Anda mengerti tujuan
dari statement yang diberikan, mungkin Anda akan dapat
dengan cepat dan mudah menulis sebuah statement baru
yang memenuhi kebutuhan.

Membuat Predikat Menggunakan AND dan =


Untuk meningkatkan efisiensi SQL, gunakan equijoin
kapanpun memungkinkan. Statement yang menggunakan
equijoin pada nilai kolom yang belum ditransformasi adalah
yang termudah untuk di-tune.

Hindari Kolom yang Telah Bertransformasi pada klausa


WHERE
Gunakan nilai kolom yang belum bertransformasi. Misalnya,
gunakan:
WHERE a.order_no = b.order_no
daripada:

WHERE TO_NUMBER (SUBSTR(a.order_no,


INSTR(b.order_no, '.') - 1))

Tuning 292
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

= TO_NUMBER (SUBSTR(a.order_no, INSTR(b.order_no,


'.') - 1))

Jangan menggunakan fungsi SQL pada klausa predikat atau


klausa WHERE. Ekspresi-ekspresi yang menggunakan kolom,
seperti fungsi menyatakan kolom tersebut sebagai argumen,
menyebabkan optimizer mengabaikan kemungkinan
menggunakan sebuah indeks pada kolom tersebut, bahkan
indeks yang unik, hingga terdapat fungsi yang berdasarkan
indeks yang dapat terdefinisi yang dapat digunakan.

Hindari ekspresi-ekspresi mixed-mode, dan hati-hati terhadap


tipe konversi yang implisit. Ketika Anda ingin menggunakan
sebuah indeks pada VARCHAR2 kolom charcol, tapi klausa
WHERE seperti berikut:

AND charcol = numexpr

di mana numexpr adalah sebuah ekspresi dari tipe angka


(misalnya, 1, USERENV('SESSIONID'), numcol, numcol+0,...),
Oracle menerjemahkan ekspresi tersebut ke:
AND TO_NUMBER(charcol) = numexpr

Hindari jenis ekspresi yang kompleks seperti berikut:

 col1 = NVL (:b1,col1)


 NVL (col1,-999) = ….

 TO_DATE(), TO_NUMBER(), and so on

Ekspresi ini mencegah optimizer dari menandai kardinalitas


valid atau estimasi selektif dan dapat mempengaruhi rencana
dan metode join secara keseluruhan.

Tambahkan predikat yang berlawanan menggunakan teknik


NVL().

Tuning 293
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

Misalnya:

SELECT employee_num, full_name Name, employee_id


FROM mtl_employees_current_view
WHERE (employee_num = NVL (:b1,employee_num)) AND
(organization_id=:1)
ORDER BY employee_num;

Juga:

SELECT employee_num, full_name Name, employee_id


FROM mtl_employees_current_view
WHERE (employee_num = :b1) AND (organization_id=:1)
ORDER BY employee_num;

Ketika Anda perlu menggunakan fungsi SQL pada filter atau


predikat join, jangan menggunakannya pada kolom di mana
Anda ingin memiliki sebuah indeks; lebih baik gunakan pada
sisi berlawanan predikat, seperti pada statement berikut:

TO_CHAR(numcol) = varcol

daripada:

varcol = TO_CHAR(numcol)

Tuning 294
Politeknik Telkom Praktikum Sistem Manajemen Basis Data

JURNAL
Terdapat empat query yang menghasilkan row yang sama
sebagai berikut:
select a.*,b.nama,c.kategori from buku a
where exists (select 1 from supplier b where
a.id_supplier=b.id_supplier) and
exists (select 1 from jenis c where a.id_jenis=c.id_jenis)

select a.*,b.nama,c.kategori from buku a


where a.id_supplier in (select b.id_supplier from supplier
b) and
a.id_jenis in (select c.id_jenis from jenis c)

select a.*,(select b.nama from supplier b where


a.id_supplier=b.supplier),
(select c.kategori from jenis c where
a.id_jenis=c.id_jenis) from buku a;

select a.*,b.nama,c.kategori from buku a, supplier b,


jenis c
where a.id_supplier = b.id_supplier and a.id_jenis =
c.id_jenis;

Dengan menggunakan explain plan dan melihat isi dari


plan_table dengan query sebagai berikut:

select plan_id, operation, object_name, object_type,


position, cost, cpu_cost from plan_table order by plan_id
desc;

Lakukanlah analisis query manakah yang memiliki cost paling


rendah dan paling tinggi (uraikan alasannya)!

Tuning 295

Anda mungkin juga menyukai