HALAMAN PERTAMA
i
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
ii
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
KATA PENGANTAR
iii
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Penulis,
DAFTAR ISI
iv
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Overview
Tujuan
Database Language.
Definisi
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
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
Database Administrator
Struktur Sistem
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.
(
Nim char(9),
Nama varchar(20) not null,
CONSTRAINT pk_mhs PRIMARY KEY (Nim)
);
Contoh :
SQL > ALTER TABLE mahasiswa
DROP CONSTRAINT pk_ mhs;
Contoh :
SQL > ALTER TABLE mahasiswa
ADD(alamat varchar(50) NOT NULL);
Contoh :
SQL > ALTER TABLE mahasiswa
MODIFY(alamat varchar(25) not null);
CASCADE CONSTRAINT :
akan menghapus semua constraint yang terhubung
dengan tabel yang dihapus.
Contoh :
SQL > DROP TABLE buku;
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
Contoh :
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';
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]];
FROM nama_tabel
[WHERE kondisi];
Contoh :
Select * from mahasiswa where nama not ‘paimen’;
BETWEEN … AND …
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, …)
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.
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
Overview
Tujuan
Contoh :
SQL > SELECT 10 * 12 – 2 FROM DUAL;
Menampilkan hasil operasi aritmatika 10 * 12 – 2
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 :
MAX (Maximum)
MAX berfungsi untuk mengembalikan nilai maksimum
yang terdapat pada sekumpulan nilai pada sebuah field.
Contoh :
MIN (Minimum)
MIN berfungsi untuk mengambil nilai minimum yang
terdapat pada sekumpulan nilai pada sebuah field.
Contoh :
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
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
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
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
Tabel A Tabel B
A1 A2
1 10
2 100 B1 B2
2 4
3 9
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
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
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,
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.
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
A1 A2
1 10
2 100
JURNAL
3 INSTALASI ORACLE
Overview
Tujuan
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.
Instalasi Oracle 43
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Windows XP Professional
Instalasi Oracle 44
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 45
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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
Instalasi Oracle 47
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 48
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 49
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 50
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 51
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 52
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
JURNAL
Instalasi Oracle 53
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 54
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Overview
Tujuan
Instalasi Oracle 55
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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:
Instalasi Oracle 57
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 58
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Instalasi Oracle 59
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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
Instalasi Oracle 62
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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
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
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
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;
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;
Contoh:
<<outer>>
LOOP
...
LOOP
...
Instalasi Oracle 68
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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;
Instalasi Oracle 70
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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;
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;
Instalasi Oracle 72
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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;
Instalasi Oracle 74
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
end if;
goto iterasi;
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
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;
/
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
Tujuan
Cursor 79
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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;
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;
/
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
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
Contoh:
DECLARE
CURSOR CUR1 IS
SELECT nim, nama, alamat
FROM mahasiswa
.. .. ..
Statement open
OPEN nama_cursor;
Contoh:
OPEN CUR1;
Cursor 84
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Statement fetch
FETCH nama_cursor INTO <variable1,variable2,..>;
Contoh:
FETCH CUR1 INTO v_nim, v_nama, v_alamat;
Statement close
CLOSE 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
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;
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
end;
/
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
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;
/
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
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;
/
Cursor 92
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
6 ERROR HANDLING
Overview
Tujuan
Handling Error 93
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Handling Error 94
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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 ]
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.
Handling Error 96
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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;
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
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
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
end;
JURNAL
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
7 STORED PROGRAM
Overview
Tujuan
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;
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;
EXECUTE
nama_procedure(parameter_1,parameter_2,...);
Contoh :
EXECUTE tambahMahasiswa
(‘30108002’,‘paimen’,‘sukapura’);
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;
Contoh:
BEGIN
SELECT nama INTO vnama FROM mahasiswa
WHERE nim = '30108002';
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim
30108002 adalah '||vnama);
END;
/
Contoh:
CREATE OR REPLACE PROCEDURE lihat_mahasiswa
(vnim IN mahasiswa.nim%type)
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;
/
Contoh:
IS
BEGIN
SELECT nama INTO vnama FROM mahasiswa
WHERE nim = vnim;
DBMS_OUTPUT.PUT_LINE('Nama mahasiswa dengan nim
'||vnim||' adalah '||vnama);
END;
/
Contoh:
CREATE OR REPLACE PROCEDURE kuadrat
(x IN OUT number)
IS
BEGIN
x:=x*x;
END;
/
Function
Perbedaan mendasar antara function dan procedure adalah
bahwa function harus mengembalikan nilai tertentu kepada
pemanggilnya. Nilai ini dikembalikan dengan menggunakan
sintaks RETURN.
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;
Sintaks:
RETURN ekspresi;
Contoh:
CREATE OR REPLACE FUNCTION tambah
(n1 number, n2 number)
RETURN number IS
BEGIN
return (n1+n2);
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;
declare
begin
IF(cariMahasiswa('30108002') = 1) THEN;
dbms_output.put_line('mahasiswa terdaftar');
ELSE
dbms_output.put_line('mahasiswa tidak
terdaftar');
END IF;
end;
Nested Function
Contoh:
DECLARE
jum number;
FUNCTION tambah(n1 number, n2 number)
RETURN number IS
BEGIN
RETURN(n1+n2);
END tambah;
BEGIN
jum:=tambah(2,3);
dbms_output.put_line('Hasil penjumlahan antara
2 dan 3 adalah '||TO_CHAR(jum));
END;
JENIS-JENIS FUNCTION :
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
luas_persegi_panjang
(p number,l number)
RETURN number
IS
BEGIN
RETURN (p*l);
END;
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;
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 :
c. Parameter masukan/keluaran
Contoh :
BEGIN
x:=pi*x*x;
vol:= x*t;
return (vol);
END;
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 :
contoh :
SQL> execute enkripsi('oh semoga nilaiku
bagus');
======================
enkripsi berhasil
======================
string sebelum enkripsi : oh semoga nilaiku
bagus
string sesudah enkripsi : 0h s3m0g4 n1l41ku
b4gus
Contoh:
SQL> select biner(10) from dual;
BINER(10)
END IF;
...
EXCEPTION
WHEN bonus_missing THEN
...
END calc_bonus;
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;
8 TRIGGER
Overview
Tujuan
Trigger 123
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Definisi
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 124
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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:
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’
Trigger 126
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Jenis-jenis Trigger
3. Instead Of Trigger
Contoh 1:
Table created.
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;
1 row created.
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
BEGIN
select count(distinct(nim)) into n
from keuangan;
dbms_output.put_line(‘jumlah mahasiswa yang
memberi donasi sebanyak ’|| n);
END;
Trigger 132
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Status Trigger
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;
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
Overview
Pada Modul ini, akan dipelajari DDL pada index, view, dan
sequence.
Tujuan
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.
Query :
CREATE INDEX nama_index ON
nama_tabel(nama_field1, nama_field2,….);
Contohnya :
SQL>CREATE INDEX mahasiswa_idx ON
mahasiswa(nim, nama, alamat );
Query :
ALTER INDEX nama_index
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage_clause]
Contoh :
Queri :
ALTER INDEX nama_index_lama RENAME TO nama_index_baru;
contoh :
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.
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
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
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
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
4. Indeks Fungsi
Indeks ini menggunakan fungsi (funtion-based index) untuk
mendefinisikan kunci indeksnya.
--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
PCT_DELETED DISTINCTIVENESS
----------- ---------------
16.7724777 910.9142073
Sumber informasi
Keberadaan indeks dapat diketahui dengan mengakses data
dictionary DBA_IND_CLOUMNS berikut ini:
--MENGAMBIL INFORMASIINDEKS.
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.
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.
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
--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;
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
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
Query :
CREATE [or replace] [force] [noforce] VIEW nama_view
[(nama_field1, …)]
AS subquery [with check option]
Contoh :
SQL > CREATE or REPLACE VIEW mahasiswa_view (nim,
nama, alamat)
AS
SELECT nim, nama, alamat
FROM mahasiswa
WHERE alamat != ‘’ with check option;
Query :
ALTER VIEW nama_view COMPILE;
Contoh :
SQL > ALTER VIEW mahasiswa_view COMPILE:
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.
COLUMN_NAME
------------------------------------
NIK NO
Nama_karyawan NO
DEPT_NO NO
Department NO
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.
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)
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).
Data Warehouse
Materialized view digunakan untuk organisasi data pada
warehouse, misalnya dalam pembuatan ringkasan penduduk
per kota melalui script berikut ini :
SEQUENCE
Query :
Contoh :
SQL > CREATE SEQUENCE seq_bulan
INCREMENT BY 1
START WITH 1
MAXVALUE 12;
Contoh :
SQL > ALTER SEQUENCE seq_bulan
INCREMENT BY 2;
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?
10 SIMPLE REPORT
Overview
Tujuan
PAGES
------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
PAGES
------------------------------------------------------------
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
**********$$$$$$$$$$**********$$$$$$$$$$**********$$$$$$$$$$
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.
301070
03 WIDO KESUMA MI 2000000
301070
04 MURDIJAT ARIF PRABOWO MI 15000000
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
8 rows selected.
(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
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.
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
“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.
8 rows selected.
Menambahkan Tanggal
Untuk menambahkan konstanta tanggal, tentunya dapat
digunakan perintah TTITLE. Namun, untuk menambahkan
tanggal sesuai dengan tanggal script dijalankan, dibutuhkan
--rpt_bayar_mahasiswa.sql
--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP
CENTER"==============================================="
SKIP 2 LEFT "User : " SQL.USER SKIP RIGHT
"Halaman :" FORMAT 99 SQL.PNO SKIP LEFT "Tanggal :"
--Menghentikan Spool
SPOOL OFF
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
DAFTAR MAHASISWA
===============================================
User : DEDY
Halaman : 2
Tanggal :09-AGT-2008
----------------------------------------------------------
PRODI
NIM NAMA JUR BAYAR
---------- -------------------- ---------- --------------
********** --------------
avg 6.750.000,00
minimum 3.500.000,00
maximum 10.000.000,00
--END OF REPORT--
--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
--Memberi Judul
TTITLE CENTER "DAFTAR MAHASISWA" SKIP
CENTER"==============================================="
--Menghentikan Spool
SPOOL OFF
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!
Overview
Tujuan
roles.
USER MANAGAMENT
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.
Contoh :
CREATE USER scott2
IDENTIFIED BY tiger
DEFAULT TABLESPACE mahasiswa
TEMPORARY TABLESPACE temp_ mahasiswa;
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;
DROP USER
Membuang pemakai dilakukan dengan operasi DROP USER.
Sintaksnya :
DROP USER user_name [CASCADE];
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;
PRIVILEGES
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
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.
Table created.
1 row created.
Table created.
1 row created.
Grant succeeded.
Connected.
REVOKE PRIVILEGES
Sekarang kita akan mencoba mnghapus hak akses scotti
terhadap table satu. Ikuti langkah berikut :
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
ROLES
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.
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.
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.
Removing Roles
Operasi yang digunakan adalah REVOKE
1. masukklah sebagai scott9
Revoke succeeded.
Connected.
Mengubah Roles
Operasi ALTER ROLE diapakai untuk mengubah tingkat
kerahasiaan.
Sintaks :
Membuang Roles
Sama seperti membuang table, index, type dan yang lainnya,
yaitu menggunakan operasi DROP.
Connected.
Role dropped.
Connected.
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.
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.
Overview
Tujuan
1. Physical Backup
Contohnya : RMAN Backup dan Restore
2. Logical Backup
Contohnya : Export dan Import, Flashback
Flasback Tabel
Sqlplus HR/HR
col region_name format a30
select * from regions;
Flashback Drop
2. Pilih Create Like dari menu drop down actions. Klik Go.
Mengatur Backup
Backup Crosschecking
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)?
Overview
Tujuan
LockHandling 263
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Locks
1. Pessimistic Locking
2. Optimistic Locking
LockHandling 264
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Locking Mechanism
Data Concurrency
LockHandling 265
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 266
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 267
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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
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.
LockHandling 269
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 270
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
DML Locks
LockHandling 271
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Lock Conflicts
LockHandling 273
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 274
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 275
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 276
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
LockHandling 277
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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.
LockHandling 279
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
JURNAL
LockHandling 280
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
14 TUNING
Overview
Tujuan
Tuning 281
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
SQL 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
EXPLAIN PLAN
Explain plan adalah suatu perintah yang digunakan untuk
menampilkan perintah eksekusi suatu query.
Tuning 283
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
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.
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
);
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
QUERY_PLAN
----------------------------------------------
SELECT STATEMENT::
TABLE ACCESS:FULL:EMP
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> @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.
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.
Tuning 290
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Tuning 292
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Tuning 293
Politeknik Telkom Praktikum Sistem Manajemen Basis Data
Misalnya:
Juga:
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)
Tuning 295