Basisdata Lanjut
Progdi Teknik Informatika
FTI UPN Veteran Jawa Timur
Semester Genap TA 2015/2016
Pengantar
Syukur alhamdulillah ke hadirat Allah SWT atas segala
limpahan Kekuatan-Nya sehingga dengan segala keterbatasan
waktu, tenaga dan pikiran yang dimiliki penulis, akhirnya modul
praktikum ini dapat terselesaikan dengan beberapa revisi dari edisi
sebelumnya.
Banyak tools yang bisa digunakan untuk membangun sebuah
sistem informasi mulai dari database hingga bahasa pemrograman
yang digunakan. Salah satunya Oracle, selain sebagai penyedia
aplikasi database Oracle juga menyediakan tool untuk membuat
aplikasi yang berbasis database khususnya Oracle. Tools yang
digunakan Oracle 10g.
Materi yang Anda dapatkan meliputi:
1. Review /SQL
2. Query Lanjutan
3. Pengenalan PL/SQL
4. Trigger
5. Index, View dan Sequence
Modul praktikum ini dibuat dengan tujuan untuk
mempermudah pelaksanaan praktikum. Dan lebih dari itu,
diharapkan mampu menjadi media akselerasi pemahaman serta
ketrampilan / skill praktikan sesuai dengan kompetensi yang
diharapkan.
Penulis sadar bahwa modul ini masih memiliki kekurangan.
Oleh karena itu saran dan masukan sangatlah diharapkan demi
semakin baiknya kualitas.
Penulis
MATERI
MATERI 1
REVIEW SQL
1.1 Basic SQL Statement
1.2 Sorting Data
1.3 Displaying Data From Multiple Table
1.4 Aggregate Data Using Group Function
1.5 Tugas Praktikum
MATERI 2
QUERY LANJUTAN
2.1 Single Row Subquery
2.2 Multiple Row Subquery
2.3 Tugas Praktikum
MATERI 3
PENGENALAN PL/SQL
3.1 Keuntungan PL/SQL
3.2 Variabel
3.3 Operator
3.4 Control Structure
3.5 Memulai dan Membuat PL/SQL
3.6 Tugas Praktikum
MATERI 4
TRIGGER
4.1 Manfaat dan Batasan Trigger
4.2 Struktur Dasar Trigger
4.3 Contoh Pembuatan Trigger
4.4 Mengkombinasikan Event Pada Trigger
4.5 Menggunakan Old dan New Qualifiers
4.6 Klausa When Pada Trigger
4.7 Tugas Praktikum
MATERI 5
ii
DATABASE
Database yang akan kita gunakan adalah HR, struktur dan relasinya
bisa anda lihat :
iii
iv
MATERI 1
REVIEW SQL
Structure Query Language (SQL) merupakan komponen
bahasa relational database system. SQL merupakan bahasa baku
(ANSI/SQL), non procedural, dan berorientasi himpunan (setoriented language). SQL dapat digunakan baik secara interaktif
atau ditempelkan (embedded) pada sebuah program aplikasi.
Beberapa komponen-Komponen SQL :
a. Data Definition Languange (DDL)
Digunakan untuk mendefinisikan data dengan menggunakan
perintah : Create, Drop, Alter.
b. Data Manipulation Language (DML)
Digunakan untuk memanipulasi data dengan menggunakan
perintah : Select, Insert, Update, Delete.
Data Manipulation Language merupakan bagian terpadu bahasa
SQL. Perintah-perintahnya dapat dibuat secara interaktif atau
ditempelkan pada sebuah program aplikasi. Pemakai hanya
perlu menentukan 'APA' yang ia inginkan, DBMS menentukan
'BAGAIMANA' cara mendapatkannya.
c.
Data Retrieval
Data Manipulation Language (DML)
CREATE
ALTER
DROP
RENAME
TRUNCATE
COMMIT
ROLLBACK
SAVEPOINT
GRANT
REVOKE
Concatenation Operator
Digunakan
untuk
menggabungkan
kolom
atau
character string (diapit single quotation marks) ke kolom lain.
Direpresentasikan dengan || . Hasil penggabungan ini berupa
ekspresi character. Contoh :
SELECT
FROM
last_name || is a || job_id
AS Employee Details
employees;
Operasi Join
Cartesian
Product
Deskripsi
Menampilkan data
dari beberapa tabel
tanpa kondisi
tertentu
Contoh
SELECT
NAMA_PEGAWAI,
NAMA_DEPARTEMEN
FROM PEGAWAI P,
DEPARTEMEN D
Join
Condition
Outer Join
Menampilkan data
dari beberapa tabel
dengan kondisi
tertentu
SELECT
NAMA_PEGAWAI,
NAMA_DEPARTEMEN
FROM PEGAWAI P,
DEPARTEMEN D
WHERE P.NO_DEP=
D.NO_DEPARTEMEN;
Menampilkan data
dari beberapa tabel
dimana kolom yang
diacu tidak
memiliki anggota
SELECT P.
NAMA_PEGAWAI,
M. NAMA_PEGAWAI
AS MANAJER
FROM PEGAWAI P,
PEGAWAI M
WHERE
P.NO_MANAJER =
M.NO_PEGAWAI(+);
SELECT
FROM
WHERE
SELECT
FROM
WHERE
SELECT
[column], group function (coloumn)
FROM
[table]
[WHERE
condition]
[GROUP BY coloumn]
[ORDER BY coloumn];
Sintaks
Dasar
TUGAS PRAKTIKUM
Dengan menggunakan table yang ada pada user HR pada
ORACLE DATABASE:
1. Buatlah query yang dapat membantu ANDA untuk melengkapi
tabel berikut ini:
MATERI 2
QUERY LANJUT
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 Subquery 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
)
Subquery
(Inner Query)
Yang dilakukan oleh subquery adalah menetapkan
kondisi pencarian pada klausa WHERE dalam beberapa cara:
a. Subquery (inner query) dijalankan sebelum Main Query
b. Output dari subquery digunakan untuk mengendalikan output
dari main query (outer query)
c. Menghasilkan list untuk klausa IN
Generate Subquery :
SELECT
FROM
WHERE
nama
Bandung
akademia
kota = (SELECT kota
FROM
akademia
WHERE nama = Rindu);
2.1.
Single-Row Subquery
Pada Single Row Subquery, hanya mengembalikan 1
nilai dan menggunakan operator pembanding :
10
Operator
=
>
>=
<
<=
<>
Meaning
Equal to
Greater than
Greater than or equal to
Less than
Less than or equal to
Not equal to
Contoh
1
Contoh 2
Using Group
Function
Contoh 2
Using HAVING
clause
2.2.
Multiple Row-Sub
Pada MultipleRow Subquery, meghasilkan lebih dari 1
nilai dan menggunakan operator pembanding multiple-row :
11
TUGAS PRAKTIKUM
1. Buat query untuk menampilkan name dan hire date dari
setiap employee yang department-nya sama dengan
Zlotkey, kecuali Zlotkey. output: 33 rows
2. Buat query untuk menampilkan employee number, last
name dan salary dari seluruh employee yang
mendapatkan salary diatas rata-rata. Tampilkan urut
berdasarkan
salary.
output: 51 rows
3. Tampilkan last name, department number dan job ID
dari seluruh employee yang department location ID-nya
adalah 1700. output: 18 rows
4. Tampilkan last name dan salary dari setiap orang yang
mempunyai manager bernama King. output: 14 rows
12
MATERI 3
PENGENALAN PL/SQL
PL/SQL, adalah bahasa prosedural yang berbentuk script
SQL dan sudah digolongkan ke dalam bahasa pemrograman generasi
4 (4GL - fourth-generation programming language). Beberapa fitur
yang diberikan antara lain ata encapsulation, overloading,
collection types, exception handling, dan information hiding.
Dengan menggunakan PL/SQL, Anda bisa menggunakan
statemen SQL untuk memanipulasi data di Oracle dan bisa
melakukan flow-of-control statemen dalam memproses data. Selain
itu, Anda bisa mendeklarasikan konstanta dan variabel, membuat
prosedur dan fungsi, sekaligus bisa untuk mengetahui kesalahan
(runtime errors) yang terjadi. Dengan demikian PL/SQL
mengabungkan manipulasi data yang didukung SQL, dengan
pemrosesan data menggunakan bahasa prosedural. Sebagai contoh
bisa Anda lihat pada contoh program dibawah ini :
DECLARE
qty_on_hand NUMBER(5);
BEGIN
SELECT quantity INTO qty_on_hand FROM inventory
WHERE product = 'TENNIS RACKET'
FOR UPDATE OF quantity;
IF qty_on_hand > 0 THEN -- check quantity
UPDATE inventory SET quantity = quantity - 1
WHERE product = 'TENNIS RACKET';
INSERT INTO purchase_record
VALUES ('Tennis racket purchased', SYSDATE);
ELSE
INSERT INTO purchase_record
VALUES ('Out of tennis rackets', SYSDATE);
END IF;
COMMIT;
END;
13
14
16
Date
Jika Anda menggunakan tipe data tanggal maka cara
mendefinisikannya adalah :
Tanggal_lahir date;
Boolean
Tipe data ini hanya bernilai true dan false, untuk
mendefinisikan :
Status boolean;
User-defined datatypes
Dengan tipe data ini Anda bisa membuat tipe data
berdasarkan sekumpulan tipe data yang Anda buat sendiri
(record). Sebagai contoh :
Declare
type t_address is record(
name address.name%type,
street address.street%type,
street_number address.street_number%type,
postcode address.postcode%type);
v_address t_address;
begin
select name,street, street_number, postcode into
v_address from address where rownum = 1;
end;
17
3.3. Operator
Seringkali dalam sebuah blok PL/SQL kita bertemu dengan
penggunaan operasi-operasi yang berkaitan dengan nilai, variabel,
dan konstanta. Ada 6 operator yang bisa digunakan seperti dibawah
ini :
Operator Logika
Operator ini bernilai TRUE dan FALSE saja dan
memiliki 3 operator logika yaitu NOT, AND, dan OR. Cara
penggunaannya tidak berbeda dengan bahasa pemrograman
yang lain.
Operator Aritmatika
Banyak kita gunakan dalam penyelesaian masalah
yang berkaitan dengan tipe data numerik, beberapa operator
bisa Anda lihat pada tabel dibawah ini :
Operator
Keterangan
Contoh
+
Penjumlahan
2+3
Pengurangan
53
Perkalian
5*2
Pembagian
10 / 3
MOD
Sisa bagi
10 MOD 3
pemakaian
operator
Declare
X Integer;
Y Number;
Begin
X := 2 + 3;
Y := 5 * 5;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(X));
DBMS_OUTPUT.PUT_LINE(TO_CHAR(Y));
End;
Operator Relasional
Digunakan untuk menyatakan hubungan antara dua
buah nilai atau ekspresi yang akan menghasilkan nilai boolean
18
Operator
Keterangan
<
Lebih kecil
<=
>
Lebih besar
>=
Operator Persamaan
Digunakan untuk melakukan pengecekan terhadap dua
buah nilai pada dua bagian yang berbeda, kiri dan kanan.
Operator
Keterangan
Sama dengan
<>
Operator Penggabungan
Kadang kala Anda membutuhkan sebuah operator
untuk menggabungkan 2 (dua) atau lebih data menjadi satu
bagian.
Dalam
PL/SQL
disediakan
sebuah
operator
penggabungan (concatenation) yang berbentuk ||.
19
Declare
X number := 10;
Y varchar2(10) := Operasi penggabungan ;
Begin
DBMS_OUTPUT.PUT_LINE(Y || TO_CHAR(X));
End;
IF THEN
Merupakan bentuk spaling sederhana dari statemen
IF, sintak penulisannya seperti berikut ini :
IF condition THEN
sequence_of_statements
END IF;
20
IF THEN ELSE
Merupakan pengembangan dari bentuk diatas dengan
penanganan untuk kondisi yang lainnya. Contoh penerapan
dalam PL/SQL :
IF trans_type = 'CR' THEN
UPDATE accounts SET balance = balance +
credit
WHERE ...
ELSE
UPDATE accounts SET balance = balance debit
WHERE ...
END IF;
IF THEN ELSEIF
Kadang kala kita mempunyai kondisi yang banyak dan
memang harus dimasukkan. Hal tersebut tidak bisa diselesaikan
hanya dengan format IF-THEN atau IF-THEN-ELSE saja, ada
alternatif satu lagi yaitu IF-THEN-ELSIF.
Contoh penerapan dalam PL/SQL bisa Anda lihat di
bawah ini :
BEGIN
...
IF sales > 50000 THEN
bonus := 1500;
ELSIF sales > 35000 THEN
bonus := 500;
ELSE
bonus := 100;
END IF;
INSERT INTO payroll VALUES (emp_id, bonus,
...);
END;
21
FOR LOOP
Jika Anda mempunyai sebuah proses perulangan yang
harus dijalankan secara sequence dan memiliki jumlah
22
i
DBMS_OUTPUT.PUT_LINE(TO_CHAR(i));
-- dijalankan sebanyak 3 kali
END LOOP;
WHILE LOOP
Merupakan perulangan yang akan dijalankan jika
kondisi yang ditemui benar, contoh dalam blok PL/SQL :
WHILE total <= 25000 LOOP
...
23
24
Untuk membuka
Oracle SQL*Plus, ikuti
langkah berikut, klik
tombol [Start] kemudian
pilih [Program] cari
menu [Oracle for
Windows NT] nah di
dalam menu itu kamu
bisa menemukan [SQL
Plus 8.0]
26
27
TUGAS PRAKTIKUM
1. Jika terdapat 3 buah variabel yaitu X (disi dgn nilai 13), Y (disi
dgn nilai 12), dan Z sebagai penampung hasil operasi-operasi
aritmatika antara X dan Y. Buatlah sebuah blok PL/SQL yang
dapat memberikan hasil sebagai berikut :
Hasil penjumlahan antara X dan Y = 25
Hasil pengurangan antara X dan Y = 1
Hasil perkalian antara X dan Y = 156
28
Nilai Angka
A
B
C
D
80 100
65 79
45 65
0 44
29
30
MATERI 4
TRIGGER
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.
4.1. Manfaat dan Batasan Trigger
Manfaat Trigger
Beberapa manfaat dalam penggunaan Trigger yaitu :
a. Mengatur integritas dari constraint yang kompleks yang
tidak mungkin ditangani oleh sintaks-sintaks pembuatan tabel.
b. Mencegah transaksi yang tidak valid
c. Memperbaiki keamanan database dengan menyediakan
audit yang lebih kompleks mengenai informasi perubahan
database dan user siapa yang melakukan perubahan.
d. Secara otomatis memberi sinyal program lain untuk
melakukan sesuatu jika isi tabel diubah.
Batasan Trigger
Trigger mempunyai batasan, yaitu :
a. Tidak dapat menggunakan perintah commit dan rollback,
selain itu juga tidak dapat memanggil procedure, function
atau package yang menggunakan perintah commit dan
rollback.
b. 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.
31
32
Bagian Trigger
Trigger timing
Trigger event
Trigger
restriction
(optional)
Trigger type
Trigger body
Keterangan
Nilai yg Mungkin
Menunjukkan kapan
trigger akan
dieksekusi
relatif terhadap
suatu event.
BEFORE
AFER
INSTEAD OF
Jenis manipulasi
data pada
tabel/view yang
menyebabkan
trigger terpacu.
INSERT
UPDATE
DELETE
CREATE
ALTER
DROP
STARTUP
SHUTDOWN
LOGOFF
LOGON
SERVERERROR
SUSPEND
Batasan yang
mengizinkan
pengeksekusian
trigger.
Berapa kali body
trigger
dieksekusi.
Berisi algoritma
aksi yang akan
dilakukan.
When (boolean
value)
Row-level
STATEMENT-level
Blok PL/SQL
Trigger Timing
Trigger Timing adalah waktu kapan trigger diaktifkan.
Tiga macam trigger timing, adalah :
a. BEFORE : trigger dijalankan sebelum DML event pada tabel
b. AFTER : trigger dijalankan setelah DML event pada tabel
c. INSTEAD OF : trigger dijalankan pada sebuah view.
33
TRY IT!!
INSERT INTO departments (department_id,
department_name, location_id)
VALUES (400, 'CONSULTING', 2400);
Ilustrasi dari trigger timing untuk event tersebut adalah
sebagai berikut :
35
TRY IT!!
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 30;
Ilustrasi dari trigger timing untuk event tersebut adalah
sebagai berikut :
36
37
38
39
sebuah
trigger,
database, digunakan
TUGAS PRAKTIKUM
1. 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;
40
MATERI 5
INDEX, VIEW DAN SEQUENCE
Data yang tersimpan dalam database semakin lama akan
semakin besar ukuran atau volumenya.
Kalau tidak didukung
dengan kecepatan akses yang memadai maka akan semakin
menurun unjuk kerjanya. Ukuran unjuk kerja dalam hal ini
kecepatan akses data dipengaruhi oleh banyak faktor.
Pada
modul 5 ini akan membahas tentang optimasi query serta
faktor-faktor lain yang berpengaruh terhadap optimalisasi
kecepatan akses data.
Optimalisasi Pada Perintah SQL
Desain aplikasi saja tidak cukup untuk meningkatkan
unjuk kerja harus didukung dengan optimasi dari perintah SQL
yang digunakan pada aplikasi tersebut.
Dalam mendesain
database, seringkali lokasi fisik data tidak menjadi perhatian
penting. Karena hanya desain logik saja yang diperhatikan.
Padahal untuk menampilkan hasil query dibutuhkan pencarian
yang melibatkan struktur fisik penyimpanan data.
Inti dari
optimasi query adalah meminimalkan jalur pencarian untuk
menemukan data yang disimpan dalam lokasi fisik.
Index pada database digunakan untuk meningkatkan
kecepatan akses data. Pada saat query dijalankan, index
mencari data dan menentukan nilai ROWID yang membantu
menemukan lokasi data secara fisik di disk.
Akan tetapi
penggunaan index yang tidak tepat, tidak akan meningkatkan
unjuk kerja dalam hal ini kecepatan akses data.
5.1.
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
41
Memodifikasi Index
SQL > ALTER INDEX mahasiswa_idx
INITRANS 10;
ALTER INDEX
mahasiswa_idx RENAME
TO mhs_idx;
42
Menghapus Index
Contoh :
SQL > DROP INDEX
mahasiswa_idx;
DROP INDEX nama_index;
Misal digunakan index yang melibatkan tiga buah
kolom yang mengurutkan kolom menurut kota, propinsi dan kode
pos dari tabel karyawan, sebagai berikut :
CREATE INDEX idx_kota_prop_kodepos
ON karyawan(kota, propinsi, kode_pos)
TABLESPACE INDX;
Lakukan query sebagai berikut :
SELECT
*
FROM
karyawan
Barat;
WHERE
propinsi=Jawa
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 tabel, 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 :
a. Membatasi akses sesuai otoritas user
b. Memudahkan pemahaman tehadap kolom penampung data
yang mungkin berbeda dengan definisi kolom pada table dasar
c. Menyederhanakan pandangan user terhadap data
d. Menangani data kompleks
e. Memudahkan penggunaan quey yang berulang karena
disimpan sebagai stored query
5.3.
44
5.4.
Sequence
Sequence digunakan untuk membangkitkan serangkaian
nilai serial yang unik.
Membuat Sequence
CREATE SEQUENCE nama_sequence
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CHACE | NOCHACE]
SQL > CREATE SEQUENCE
seq_bulan
INCREMENT BY 1
START WITH 1
MAXVALUE 12
INCREMENT BY berfungsi
untuk
incrementasi
setiap kali terjadi penyisipan record.
mendefinisikan
jumlah
mendefinisikan
bahwa
jika
telah
bilangan
sequence
46
Memodifikasi Sequence
Menghapus Sequence
DROP SEQUENCE nama_sequence;
47
TUGAS PRAKTIKUM
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
48