Transcript
8/20/2019 Modul Prak BDL - TA_1516_Genap
1/53
PraktikumBasisdata Lanjut
Progdi Teknik InformatikaFTI UPN “Veteran” Jawa Timur
Semester Genap TA 2015/2016
Laboratorium Desain Dan Basis Data
8/20/2019 Modul Prak BDL - TA_1516_Genap
2/53
i
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 SequenceModul 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
8/20/2019 Modul Prak BDL - TA_1516_Genap
3/53
ii
MATERI
MATERI 1 REVIEW SQL
1.1 Basic SQL Statement1.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 Subquery2.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/SQL3.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 Qualifiers4.6 Klausa When Pada Trigger
4.7 Tugas Praktikum
MATERI 5 INDEX, VIEW DAN SEQUENCE
5.1 Master Detail
5.2 Tugas Praktikum
8/20/2019 Modul Prak BDL - TA_1516_Genap
4/53
iii
DATABASE
Database yang akan kita gunakan adalah HR, struktur dan relasinya
bisa anda lihat :
8/20/2019 Modul Prak BDL - TA_1516_Genap
5/53
iv
8/20/2019 Modul Prak BDL - TA_1516_Genap
6/53
1
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 (set-
oriented 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 Control Language (DCL)
Digunakan untuk mengontrol hak para pemakai data denganperintah : Grant, Revoke.
SELECT Data Retrieval
INSERT
UPDATE Data Manipulation Language (DML)
DELETE
MERGE
8/20/2019 Modul Prak BDL - TA_1516_Genap
7/53
2
CREATE
ALTER
DROP Data Definition Language (DDL)
RENAME
TRUNCATE
COMMIT
ROLLBACK Transaction Control (untuk DML)
SAVEPOINT
GRANT Data Control Language (DCL)
REVOKE
1.1. Basic SQL 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 :
Menulis SQL Statement :
1. SQL statements tidak case sensitive
2. SQL statements dapat ditulis dalam satu atau banyak baris
3. Keyword harus dituliskan secara berurutan
4. Clause biasanya ditempatkan dalam satu baris
5. Indent digunakan untuk memudahkan pembacaan
SELECT [DISTINCT | ALL] * | coloumn1,coloumn2
FROM [table]
[WHERE condition]
[GROUP BY coloumn]
[HAVING condition]
[ORDER BY coloumn][ASC|DSC];
8/20/2019 Modul Prak BDL - TA_1516_Genap
8/53
3
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 last_name || ‘ is a ‘ || job_id
AS “Employee Details”
FROM employees;
1.2. Sorting Data
Klausa [WHERE condition(s)]
Klausa [WHERE condition(s)] untuk membatasi row(s)
yang ditampilkan. Untuk tipe data character and date harus
ditempatkan dalam single quotation.
a. Character bersifat case sensitive, Date bersifat format
sensitive.
b. Default format untuk tipe Date: DD-MON-RR.
c.
Alias tidak dapat digunakan pada clause WHEREd. Kondisi pembanding:
Klausa [ORDER BY {coloumn, expr} [ASC|DESC]]
8/20/2019 Modul Prak BDL - TA_1516_Genap
9/53
4
Default klausa ORDER BY adalah Ascending. Dapat
digunakan pada kolom alias. Dapat juga dilakukan SORT
berdasarkan kolom yang tidak ditampilkan dalam daftar SELECT.
Contoh :
SELECT employee_id, last_name, salary*12
annsal
FROM employees
ORDER BY annsal;
Dapat dilakukan pada multi kolom :
SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id, salary DESC;
1.3. Displaying Data From Multiple Table
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.
Operasi Join Deskripsi Contoh
Cartesian
Product
Menampilkan data
dari beberapa tabel
tanpa kondisi
tertentu
SELECT
NAMA_PEGAWAI,
NAMA_DEPARTEMEN
FROM PEGAWAI P,
DEPARTEMEN D
8/20/2019 Modul Prak BDL - TA_1516_Genap
10/53
5
Join
Condition
Menampilkan data
dari beberapa tabel
dengan kondisitertentu
SELECT
NAMA_PEGAWAI,
NAMA_DEPARTEMEN
FROM PEGAWAI P,
DEPARTEMEN D
WHERE P.NO_DEP=
D.NO_DEPARTEMEN;
Outer Join
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(+);
Join digunakan ketika memerlukan data yang bersumber
pada lebih dari satu tabel. Untuk melakukan JOIN, perhatikan
kolom yang yang menjadi Primary Key dan Foreign Key dari
setiap tabel yang ingin di-JOIN-kan. Gunakan nama tabel untuk
mempertegas pengambilan kolom, terutama jika nama kolom yang
sama terdapat pada lebih dari satu tabel. Gunakan tabel alias
untuk menyederhanakan penulisan query dan meningkatkan unjuk
kerja.
SELECT e.employee_id, e.last_name, e.department_id,d.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;
SELECT e.last_name, d.department_name, l.city
FROM employees e, departments d, locations l
WHERE e.department_id = d.department_id
AND d.location_id = l.location_id;
Sintaks Simple Join
8/20/2019 Modul Prak BDL - TA_1516_Genap
11/53
6
1.4. Aggregate Data Using Group Function
Yaitu fungsi-fungsi yang hasilnya diambil dari proses tiap
baris pada tabel. Proses tersebut akan mengolah nilai sebuah field
atau lebih mulai baris pertama sampai seluruh baris.
Fungsi-fungsi tersebut yakni:
SELECT [column], group function (coloumn)
FROM [table]
[WHERE condition]
[GROUP BY coloumn]
[ORDER BY coloumn];
Sintaks
8/20/2019 Modul Prak BDL - TA_1516_Genap
12/53
7
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:
2.
Tampilkan last name dan department number untuk
semua employees dalam department 20 sampai 50
dalam suatu urutan berdasarkan last name.
3.
Buatlah sebuah query untuk menampilkan last_name,
job_code, hire_date, dan employee number sebagaiurutan pertama! Berikan nama alias START DATE untuk
kolom hire_date! Berikut hasil tampilan query:
4.
Buatlah sebuah query untuk menampilkan job_id , secara
unik dari table employees!
5.
Buatlah LAPORAN seluruh pegawai dan job_id -nya.
Tampilkan last_name yang digabung dengan job_id -nya
(dipisahkan dengan koma dan spasi) dan nama kolomnyaEmployee and Title!
6.
Buatlah sebuah query yang menampilkan last_name dan
salary yang mendapatkan salary lebih dari $12,000!
7.
Buatlah sebuah query yang menampilkan last_name dan
department number yang employee number -nya sama
dengan 176!
8.
Buatlah sebuah query yang menampilkan last_name, job_id , dan start_date untuk pegawai yang nama
8/20/2019 Modul Prak BDL - TA_1516_Genap
13/53
8
terakhirnya Matos dan Taylor, urutkan berdasarkan
start_date secara ascending!
9.
Tampilkan last_name (Employee) dan salary (Monthly
Salary) dari pegawai yang salary -nya diantara $5,000 dan$12,000 yang department ID-nya sama dengan 20 atau
50!
10. Buatlah sebuah query yang menampilkan last_name dan
start date untuk semua pegawai mulai bekerja pada
tahun 1994!
11. Buatlah sebuah query yang menampilkan last_name dan
job_id -nya untuk semua pegawai yang tidak memiliki
manager!
12. Pelanggan dari department HR menginginkan query yang
fleksibel dalam penulisannya. Mereka menginginkan
semacam laporan yang menampilkan last_name dan
salary untuk pegawai yang gajinya lebih dari jumlah yang
dimasukkan oleh user. Jika anda memasukkan $12000
maka akan menampilkan data sebagai berikut:
13.
Buatlah sebuah query dimana user dapat memasukkan
data sesuai manager_id dan menghasilkan employee_id,
last_name, salary, dan department untuk pegawai sesuai
managernya.
14. Buatlah sebuah query untuk menampilkan last_name dari
tabel pegawai untuk last_name yang huruf ketiganya a!
15. Perhatikan 2 query berikut, jelaskan perbedaan output
yang dihasilkan!a. SELECT AVG(commission_pct)
FROM employees;
b. SELECT AVG(NVL(commission_pct, 0))
FROM employees;
8/20/2019 Modul Prak BDL - TA_1516_Genap
14/53
9
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_listFROM table1, table_2 [,table_3 …]
WHERE {expression
{[NOT] IN | comparison operator} | [NOT] EXIST }
( SELECT [DISTINCT] subquery_select_list
FROM table_list
WHERE search_conditions
)
Yang dilakukan oleh subquery adalah menetapkan
kondisi pencarian pada klausa WHERE dalam beberapa cara:
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
Subquery
(Inner Query)
8/20/2019 Modul Prak BDL - TA_1516_Genap
15/53
10
d. Mengembalikan sebuah nilai yang dapat digunakan oleh
operator
e. Mengembalikan nilai boolean (true atau false)
Petunjuk penggunaan Subquery yaitu :
a)
Letakkan subquery dalam tanda kurung
b) Letakkan subquery pada sisi kanan dari operator pembanding
c) Jangan tambahkan klausa Order By dalam subquery
d) Gunakan operator single-row untuk single-row subquery
e) Gunakan operator multiple-row untuk multiple-row subquery
Penggunaan Subquery
Tampilkan nama Akademia yang satu kota dengan Rindu ?
Generate Subquery :
SELECT nama
FROM akademia
WHERE 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 :
Bandun
8/20/2019 Modul Prak BDL - TA_1516_Genap
16/53
11
Contoh Penggunaan Single-Row Subquery
2.2. Multiple Row-Sub
Pada Multiple–Row Subquery, meghasilkan lebih dari 1
nilai dan menggunakan operator pembanding multiple-row :
Operator
=
>
>=
8/20/2019 Modul Prak BDL - TA_1516_Genap
17/53
12
Contoh Penggunaan Multiple Row-Sub
TUGAS PRAKTIKUM
1. Buat query untuk menampilkan name dan hire date dari
setiap employee yang department-nya sama denganZlotkey, 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
8/20/2019 Modul Prak BDL - TA_1516_Genap
18/53
13
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;
Gambar 1. Contoh PL/SQL
8/20/2019 Modul Prak BDL - TA_1516_Genap
19/53
8/20/2019 Modul Prak BDL - TA_1516_Genap
20/53
15
Jika menggunakan PL/SQL, satu blok statemen akan dikirimkan
sekaligus pada waktu yang sama.
Keuntungan yang diperoleh dari sisi aplikasi adalah
apilkasi menjadi lebih ringan karena respon dari server cepat dan
statemen dikirimkan sekaligus pada waktu yang sama dan
penggunaan memori juga berkurang.
Untuk gambaran lebih jelas Anda bisa lihat gambar 3,
yang menunjukkan hubungan aplikasi dan database pada lingkungan
client-server.
Higher Productivity
PL/SQL bisa digunakan di semua aplikasi Oracle termasukOracle Forms dan Oracle Reports. Sehingga tidak perlu membuat
dengan sintak yang lain pada platform yang sama dan waktu
pengembangan pun bisa di hemat.
Full Portability
PL/SQL bisa berjalan dimana pun Oracle bisa dijalankan.
Dengan demikian Anda bisa menulis kode program dalam PL/SQL
dan bisa digunakan pada lingkungan yang berbeda.
Gambar 3. Boosts Performance
8/20/2019 Modul Prak BDL - TA_1516_Genap
21/53
16
Tight Integration with SQL
PL/SQL dan SQL languages mempunyai hubungan sangat
dekat. PL/SQL mendukung semua tipe data SQL dan non value NULL
sehingga memungkinkan Anda memanipulasi data dengan lebih
mudah dan efisien.
Security
PL/SQL memungkinkan Anda untuk memberikan
pembatasan antara client dan server. Pembatasan tersebut bisa
diberikan lewat trigger yang ditulis dalam bentuk PL/SQL sehingga
bisa membatasi akses ke aplikasi dan database. Selain itu Anda
juga bisa membatasi user untuk hanya memanipulasi perintah
PL/SQL di dalam sebuah stored procedures yang bisa di jalankan
user tersebut dengan hak yang dia miliki.
Sebagai contoh, Anda memberikan akses kepada seorang
user untuk bisa mengakses prosedur update_table, tetapi user
tersebut tidak bisa mengakses tabel tersebut.
3.2. Variabel
Secara global tipe data pada PL/SQL dibedakan menjadi 6
(enam) golongan yaitu :
Numeric
Digunakan untuk mendefinisaikan variabel yang
bertipe numerik (angka), untuk mendefinisikannya Anda harus
menuliskan seperti ini :
Jumlah_barang number(5,2);
Angka 5 dan 2 yang ada pada bagian belakang
menunjukkan presisi (5) dan scale (2). Untuk scale bisa
digunakan dan bisa juga tidak.
Character
Digunakan untuk mendefinisikan variabel yang bertipe
karakter (huruf dan string lainnya), untuk mendefinisikan Anda
harus menuliskan seperti ini :
Nama_pelanggan varchar(30);
8/20/2019 Modul Prak BDL - TA_1516_Genap
22/53
17
Angka 30 pada varchar menunjukkan panjang data
pada variabel tersebut.
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;
Datatypes for specific columns
Tipe data ini digunakan untuk mendapatkan tipe data
yang digunakan pada sebuah kolom pada sebuah tabel.
Sehingga tipe variabel yang kita pesan otomatis sama denga
tipe kolom yang ada pada tabel. Cara mendefinisikannya :
Nomor_induk mahasiswa.nim%type;
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;
8/20/2019 Modul Prak BDL - TA_1516_Genap
23/53
18
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 5 – 3
* Perkalian 5 * 2
/ Pembagian 10 / 3
MOD Sisa bagi 10 MOD 3
Berikut ini adalah contoh pemakaian operator
aritematika dalam blok PL/SQL.
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
8/20/2019 Modul Prak BDL - TA_1516_Genap
24/53
19
(TRUE atau FALSE). Yang termasuk dalam operasi relasional
bisa Anda lihat pada tabel berikut ini :
Operator Keterangan
< Lebih kecil
Lebih besar
>= Lebih besar atau sama dengan
Operator Persamaan
Digunakan untuk melakukan pengecekan terhadap dua
buah nilai pada dua bagian yang berbeda, kiri dan kanan.
Operator Keterangan
= Sama dengan
Tidak sama dengan
Contoh penggunaan dalam blok PL/SQL :
DeclareX Integer;
Y Number;
Begin
X := 2 + 3;
Y := 5 * 5;
If X 17 Then
DBMS_OUTPUT.PUT_LINE(TO_CHAR(X));
ElseDBMS_OUTPUT.PUT_LINE(TO_CHAR(Y));
End if
End;
Operator Penggabungan
Kadang kala Anda membutuhkan sebuah operator
untuk menggabungkan 2 (dua) atau lebih data menjadi satu
bagian. Dalam PL/SQL disediakan sebuah operatorpenggabungan (concatenation) yang berbentuk ||.
8/20/2019 Modul Prak BDL - TA_1516_Genap
25/53
20
Declare
X number := 10;
Y varchar2(10) := “Operasi penggabungan ”;
BeginDBMS_OUTPUT.PUT_LINE(Y || TO_CHAR(X));
End;
Hasil dari PL/SQL tersebut adalah “Operasi Penggabungan
10”, jika yang digabungkan berbeda tipe data maka salah satu
harus di konversi tipe datanya. Pada contoh diatas variabel X yang
bertipe number di konversi menjadi karakter menggunakan fungsi
TO_CHAR().
3.4. Control Structures (Conditions and Iteration)
Sama dengan model bahasa pemrograman yang lain,
dalam PL/SQL juga mengenal statemen kondisi dan perulangan.
Untuk kondisi ada beberapa macam antara lain :
IF – THEN
Merupakan bentuk spaling sederhana dari statemen
IF, sintak penulisannya seperti berikut ini :
IF condition THEN
sequence_of_statements
END IF;
Contoh penerapan dalam PL/SQL bisa Anda lihat
seperti dibawah ini :
IF sales > quota THEN
compute_bonus(empid);
UPDATE payroll SET pay = pay + bonus
WHERE empno = emp_id;
END IF;
8/20/2019 Modul Prak BDL - TA_1516_Genap
26/53
21
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 dibawah 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;
8/20/2019 Modul Prak BDL - TA_1516_Genap
27/53
22
Untuk perulangan ada beberapa macam yaitu :
LOOP
Merupakan bentuk sederhana dari perulangan yang
ada pada PL/SQL, cara penulisannya adalah :
LOOP
sequence_of_statements
END LOOP;
Contoh penerapan dalam blok PL/SQL :
LOOP...
IF credit_rating < 3 THEN
...
EXIT; -- exit loop immediately
END IF;
END LOOP;
Statemen EXIT merupakan tanda bagi perulangan
untuk mengakhiri proses perulangan.
Selain itu ada bentuk lain dari EXIT yaitu EXIT – WHEN
seperti terlihat pada contoh di berikut ini :
...
LOOP
FETCH c1 INTO ...
EXIT WHEN c1%NOTFOUND;
--exit loop if condition is true...
END LOOP;
CLOSE c1;
FOR – LOOP
Jika Anda mempunyai sebuah proses perulangan yang
harus dijalankan secara sequence dan memiliki jumlah
8/20/2019 Modul Prak BDL - TA_1516_Genap
28/53
23
perulangan yang pasti, Anda bisa menggunakan model
perulangan FOR – LOOP. Contoh penerapan dalam blok PL/SQL :
FOR i IN 1..3 LOOP -- memberi nilai 1,2,3 ke
i
DBMS_OUTPUT.PUT_LINE(TO_CHAR(i));
-- dijalankan sebanyak 3 kali
END LOOP;
FOR i IN REVERSE 1..3 LOOP –-memberi nilai
3,2,1 to i
DBMS_OUTPUT.PUT_LINE(TO_CHAR(i));
-- dijalankan sebanyak 3 kali
END LOOP;
Hasilnya akan berlawanan dari contoh sebelumnya,
yaitu 3, 2, 1. Atau jika Anda ingin menghasilkan sebuah
perulangan dengan sejumlah kelipatan, gunakan kata STEP
seperti contoh di berikut ini :
FOR J = 5 TO 15 STEP 5 --memberi nilai
5,10,15 ke J
DBMS_OUTPUT.PUT_LINE(TO_CHAR(J));
-- J mempunyai nilai 5,10,15
NEXT J
Contoh di atas menghasilkan 3 (tiga) buah angka yaitu5, 10, 15.
WHILE – LOOP
Merupakan perulangan yang akan dijalankan jika
kondisi yang ditemui benar, contoh dalam blok PL/SQL :
WHILE total
8/20/2019 Modul Prak BDL - TA_1516_Genap
29/53
24
SELECT sal INTO salary FROM emp WHERE ...
total := total + salary;
END LOOP;
Pada contoh diatas proses perulangan dengan WHILE
akan dijalankan terus selama total lebih kecil atau sama
dengan 25000, jika melebihi 25000 maka perulangan tersebut
akan dihentikan.
Atau jika menggunakan operator logika, bisa Anda
lihat pada contoh berikut :
done := FALSE;WHILE NOT done LOOP
sequence_of_statements
done := boolean_expression;
END LOOP;
3.5. Memulai dan Membuat PL/SQL
Memulai PL/SQL
Untuk memulai membuat PL/SQL Anda menggunakan tools
Oracle SQL*Plus yang sudah otomatis terinstal saat Anda menginstal
Oracle Form atau Oracle Database. Dan tentu saja Anda
memerlukan user dan password seperti yang telah dijelaskan pada
bab Pengantar Umum dibagian awal modul ini.
8/20/2019 Modul Prak BDL - TA_1516_Genap
30/53
25
Masukkan user dan password yang telah Anda miliki, jika
Host String yang Anda masukkan tidak dikenali maka akan muncul
pesan kesalahan “ERROR : ORA-12154 : TNS : could not resolveservice name” seperti terlihat pada gambar dibawaH ini :
Untuk membuka
Oracle SQL*Plus, ikutilangkah berikut, klik
tombol [Start] kemudian
pilih [Program] cari
menu [Oracle for
Windows NT] nah di
dalam menu itu kamu
bisa menemukan SQL
Gambar 4. Pesan kesalahan host string tidak dikenali
8/20/2019 Modul Prak BDL - TA_1516_Genap
31/53
26
Apabila user atau password Anda salah maka akan muncul
pesan kesalahan “ERROR : ORA-01017 : invalid username/password;
logon denied”. Jika Anda berhasil login maka akan muncul tampilan
seperti pada gambar berikut ini :
Membuat prosedur PL/SQL tanpa paramater
Setelah berhasil login untuk membuat sebuah PL/SQL
Anda harus mendeklarasikan sebuah prosedure dengan sintak :CREATE OR REPLACE PROCEDURE procedure-name IS
[deklarasi variabel]
BEGIN
statemen-PL/SQL
END;
Contoh penerapan dalam Oracle SQL*Plus ::
Gambar 5 Jika sukses login
8/20/2019 Modul Prak BDL - TA_1516_Genap
32/53
27
U
ntuk melihat hasilnya dari prompt SQL ketikkan EXECUTE nama-
prosedure. Atau bisa Anda singkat menjadi EXEC nama-prosedure.
Jika saat menjalankan PL/SQL di SQL*Plus Anda tidak
mendapatkan hasil apa-apa di layar (dengan catatan tidak ada
kesalahan kode program) maka tuliskan sintak berikut ini:.
SQL>set setserveroutput on
Jika kode program Anda cukup panjang atau jika terjadi
kesalahan dan ingin memperbaikinya ketikkan “ED” pada prompt
SQL setelah itu akan muncul sebuah editor untuk mengedit sintakterakhir yang Anda tuliskan sepertipada gambar dibawah ini.
Gambar 6. Pembuatan prosedur dengan SQL*Plus
Gambar 7. Hasil eksekusi PL/SQL
Gambar 8 Editor untuk memperbaiki sintak
8/20/2019 Modul Prak BDL - TA_1516_Genap
33/53
28
Untuk kembali ke PL/SQL tekan tombol [ALT+F] lanjutkan
dengan menekan tombol [X] jika muncul pertanyaan pilih [Yes].
Membuat prosedur PL/SQL dengan parameter
Semua contoh diatas adalah prosedur yang tidak
menggunakan parameter, dimana nilai yang diproses sudah
ditentukan dan berada di dalam prosedur tersebut. Ada juga
prosedur yang sifatnya dinamis dimana nilainya bisa kita ubah
sesuai dengan kondisi yang diinginkan. Agar bisa berfungsi seperti
itu prosedur tersebut harus menggunakan sebuah paramater
sebagai penerima inputan dari user.
Untuk cara pembuatan sama dengan prosedur yang tidak
menggunakan parameter. Contoh penerapannya bisa Anda lihat di
bawah ini :
CREATE OR REPLACE PROCEDURE tambah(pnim IN
VARCHAR2, pnama IN VARCHAR2) IS
BEGIN
Insert into Mahasiswa(nim, nama)
values(pnim, pnama);
END;
Untuk menjalankan prosedure tersebut, pada prompt SQL
tuliskan seperti di bawah ini :
SQL> exec tambah(’00.41010.0001’,’Superman’);
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
8/20/2019 Modul Prak BDL - TA_1516_Genap
34/53
29
2. Buatlah sebuah blok PL/SQL untuk menentukan Nilai Huruf
(A,B,C,D) dari nilai ujian mahasiswa (masih berbentuk angka)
pada suatu perguruan tinggi di Surabaya. Ketentuannya
sebagai berikut :
3. Tampilkan urut angka 1-10. Dengan menggunakan :
a.
LOOPb. FOR – LOOP
c. WHILE – LOOP
4. Hitung hasil dari penjumlahan bilangan – bilangan yang
terdapat pada deret berikut dengan menggunakan blok
PL/SQL :
3 + 6 + 9 + 12 + 15 . . . + 30
5. Buatlah sebuah blok PL/SQL yang dapat menentukan sebuah
bilangan, apakah termasuk bilangan positif, negatif, atau nol.
Nilai Huruf Nilai Angka
A 80 – 100
B 65 – 79
C 45 – 65
D 0 – 44
8/20/2019 Modul Prak BDL - TA_1516_Genap
35/53
30
8/20/2019 Modul Prak BDL - TA_1516_Genap
36/53
31
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.
8/20/2019 Modul Prak BDL - TA_1516_Genap
37/53
32
4.2. Struktur Dasar Trigger
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
BEGINTrigger body
END;
Sintak penulisan dari trigger, berisi beberapa dari
komponen berikut :
1. Trigger timing
a. Untuk tabel : BEFORE, AFTER.
b. Untuk view : INSTEAD OF.
2. Trigger Event
INSERT, UPDATE atau DELETE.
3. Nama Tabel
Nama tabel atau view yang berhubungan dengan trigger.
4. Tipe Trigger
Baris atau Pernyataan (statement)
5. When
Penulisan kondisi pembatasan
6. Trigger Body
Bagian prosedur yang dituliskan pada trigger.
Nama trigger sebaiknya dengan jelas mencerminkan
table yang diaplikasikan, Perintah DML Trigger, status
before/after, dan apakah row level atau statement level.
Misalnya trigger BEFORE UPDATE dengan row level pada table
KARYAWAN dapat diberi nama bef_upd_row_karyawan.
8/20/2019 Modul Prak BDL - TA_1516_Genap
38/53
33
Triggering statement adalah statement/perintah yang
menyebabkan trigger tereksekusi.
Komponen dalam Trigger :
Bagian Trigger Keterangan Nilai yg Mungkin
Trigger timing
Menunjukkan kapantrigger akandieksekusirelatif terhadapsuatu event.
BEFOREAFERINSTEAD OF
Trigger event
Jenis manipulasidata padatabel/view yangmenyebabkantrigger terpacu.
INSERTUPDATE
DELETECREATEALTERDROPSTARTUPSHUTDOWNLOGOFFLOGONSERVERERROR
SUSPEND
Triggerrestriction(optional)
Batasan yangmengizinkanpengeksekusiantrigger.
When (booleanvalue)
Trigger typeBerapa kali bodytriggerdieksekusi.
Row-levelSTATEMENT-level
Trigger bodyBerisi algoritmaaksi yang akandilakukan.
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.
8/20/2019 Modul Prak BDL - TA_1516_Genap
39/53
34
Kita mungkin akan berhubungan dengan data lama
(old) dan data baru (new) yang terjadi dalam transaksi. Dalam
trigger, dikenal istilah alias atau referensi, yaitu sejenis variabel
yang menyimpan nilai dari suatu kolom dalam tabel. Alias
terbagi menjadi dua, yaitu:
1. Data Baru
Untuk mendapatkan data baru pada sebuah tabel di dalam
trigger body, dapat dilakukan dengan perintah sebagai berikut:
:new.nama_kolom
2. Data Lama
Untuk mendapatkan data lama pada sebuah tabel di dalam
trigger body, perintah yang digunakan:
:old.nama_kolom
Referensi nilai kolom di trigger:
insert (new.nama_kolom)
update (new.nama_kolom dan old.nama_kolom)
delete (old.kolom_name)
Trigger Event
Trigger Event, ada 3 kemungkinan : INSERT, UPDATE atau
DELETE. Pada saat trigger event UPDATE, kita dapat
memasukkan daftar kolom untuk mengidentifikasi kolom mana
yang berubah untuk mengaktifkan sebuah trigger (contoh: UPDATE
OF salary...). Jika tidak ditentukan, maka perubahannya akan
berlaku untuk semua kolom pada semua baris.
Trigger Type
Tipe dalam trigger ada 2, yaitu :
a. Statement
Statement-level trigger dieksekusi satu kali pada saat
transaksi, tanpa memperhatikan jumlah row yang terlibat.
Misalnya, jika terdapat suatu transaksi yang memasukkan
1000 baris ke dalam tabel, maka statement-level trigger
hanya akan dieksekusi sekali saja. Statement-level triggerberguna jika kode dalam trigger body tidak bergantung pada
8/20/2019 Modul Prak BDL - TA_1516_Genap
40/53
35
baris yang terpengaruh oleh triggering statement. Secara
default trigger yang dibuat adalah statement-level trigger.
b. Row
Row-level trigger dieksekusi untuk setiap row yang
dimanipulasi pada suatu transaksi. Dengan kata lain, row-
level trigger mengerjakan trigger action satu kali untuk
setiap row yang dimanipulasi. Penerapan trigger ini
ditunjukkan oleh adanya klausa FOR EACH ROW. Row-level
trigger berguna jika kode dalam trigger body bergantung
pada setiap baris yang terpengaruh oleh triggering
statement.
Trigger Body
Trigger body mendefinisikan tindakan yang perlu
dikerjakan pada saat terjadinya event yang mengakibatkan
sebuah trigger menjadi aktif.
4.3. Contoh PembuatanTrigger
Contoh berikut ini akan mengaktifkan sebuah triggerpada saat sebuah baris tunggal dimanipulasi pada tabel :
Misal diberikan perintah DML untuk menyisipkan baris baru
(INSERT) ke dalam tabel sebagai berikut :
INSERT INTO departments (department_id,
department_name, location_id)
VALUES (400, 'CONSULTING', 2400);
Ilustrasi dari trigger timing untuk event tersebut adalah
sebagai berikut :
TRY IT!!
8/20/2019 Modul Prak BDL - TA_1516_Genap
41/53
36
Jika DML statement berlaku untuk lebih dari satu
baris yang ada pada tabel (multiple row), semisal :
UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 30;
Ilustrasi dari trigger timing untuk event tersebut adalah
sebagai berikut :
4.4. Mengkombinasikan Event Pada TriggerBeberapa event pada trigger bisa dikombinasikan
dalam sebuah trigger dengan menggunakan predikat kondisional
INSERTING, UPDATING dan DELETING. Berikut ini akan dibuat
trigger yang menggunakan predikat kondisional INSERTING,
UPDATING dan DELETING untuk membatasi manipulasi data
pada tabel EMPLOYEES hanya diperbolehkan pada setiap jam
kerja mulai hari Senin sampai Jum’at.
TRY IT!!
8/20/2019 Modul Prak BDL - TA_1516_Genap
42/53
37
BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
IF (TO_CHAR (SYSDATE,'DY') IN ('SAT','SUN')) OR
(TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN '08'
AND '18')
THEN
IF DELETING THEN
RAISE_APPLICATION_ERROR (-20502,'You may
delete from
EMPLOYEES table only during business hours.');
ELSIF INSERTING THEN
RAISE_APPLICATION_ERROR (-20500,'You may
insert intoEMPLOYEES table only during business
hours.');
ELSIF UPDATING ('SALARY') THEN
RAISE_APPLICATION_ERROR (-20503,'You may update
SALARY only during business hours.');
ELSE
RAISE_APPLICATION_ERROR (-20504,'You may updateEMPLOYEES table only during normal hours.');
END IF;
END IF;
END;
4.5. Menggunakan Old dan New Qualifiers
Pada Row Trigger, nilai dari kolom sebelum dan sesudah
perubahan data dapat dirujuk dengan menggunakan OLD dan
NEW qualifier. OLD dan NEW hanya digunakan pada Row
Trigger. OLD dan NEW menggunakan prefiks (:) untuk
pernyataan dalam perintah SQL. Jika qualifier ini terlibat
dalam pembatasan kondisi pada klausa WHEN, maka tidak
digunakan prefiks (:).
Row triggers akan menurunkan unjuk kerja jika
banyak dilakukan update pada tabel yang cukup besar.
8/20/2019 Modul Prak BDL - TA_1516_Genap
43/53
8/20/2019 Modul Prak BDL - TA_1516_Genap
44/53
39
4.6. Penggunaan Klausa When Pada TriggerUntuk membatasi operasi trigger hanya pada baris
yang memenuhi kondisi tertentu, maka digunakan klausa
WHEN. Berikut ini akan dibuat trigger pada tabel EMPLOYEES
yang menghitung komisi yang diterima oleh seorang pegawai pada
saat sebuah baris ditambahkan ke dalam tabel EMPLOYEES,
atau pada saat dilakukan modifikasi pada gaji pegawai.
CREATE OR REPLACE TRIGGER derive_commission_pct
BEFORE INSERT OR UPDATE OF salary ON employees
FOR EACH ROW
WHEN (NEW.job_id = 'SA_REP')
BEGIN
IF INSERTING
THEN :NEW.commission_pct := 0;
ELSIF :OLD.commission_pct IS NULL
THEN :NEW.commission_pct := 0;
ELSE
:NEW.commission_pct := :OLD.commission_pct +
0.05;
END IF;
END;
/
Pada klausa WHEN, penggunaan OLD dan NEW qualifier
tidak dengan prefiks (:). Untuk menggunakan NEW qualifier,
gunakan BEFORE Row Trigger.
4.7. Perintah Umum
Status Trigger
Untuk mengubah status sebuah trigger dijalankan sintaks
berikut :
TRY IT!!
8/20/2019 Modul Prak BDL - TA_1516_Genap
45/53
40
ALTER TRIGGER nama_trigger DISABLE | ENABLE;
DISABLE : untuk menonaktifkan trigger yang sudah dibuat
ENABLE : untuk mengaktifkan kembali trigger yang sudah di
DISABLE.
Untuk mengaktifkan atau menonaktifkan semua trigger
yang berlaku untuk sebuah tabel, digunakan perintah :
ALTER TABLE table_name DISABLE | ENABLE ALL
Untuk melakukan kompilasi ulang sebuah trigger,
digunakan perintah :
ALTER TRIGGER trigger_name COMPILE
Menghapus Trigger
Untuk menghapus trigger dari database, digunakan
perintah :
DROP TRIGGER trigger_name;
Semua trigger yang berlaku pada sebuah tabel akan
dihapus pada saat tabel tersebut dihapus dari database.
TUGAS PRAKTIKUM
1. Jelaskan maksud trigger dibawah ini:
create trigger ledger_after_ins_row
before insert on LEDGER_AUDIT
for each rowbegin
call INSERT_LEDGER_DUP(:new.Action_Date,
:new.Action, :new.Item,
:new.Quantity, :new.QuantityType, :new.Rate,
:new.Amount, :new.Person);
end;
8/20/2019 Modul Prak BDL - TA_1516_Genap
46/53
41
MATERI 5
INDEX, VIEW DAN SEQUENCEData 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 optimalisasikecepatan 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 tetapipenggunaan 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
8/20/2019 Modul Prak BDL - TA_1516_Genap
47/53
42
berdasarkan pada field – field dari sebuah tabel. Index bisa
dibuat secara otomatis untuk constraint primary key atau
unique key dan secara manual melalui CREATE INDEX statement.
Membuat Index
Memodifikasi Index
Mengubah Nama Index
CREATE INDEX nama_index ON
nama_tabel(nama_field1, nama_field2,….);
SQL>CREATE INDEX mahasiswa_idx ONmahasiswa(nim, nama, alamat );
ALTER INDEX nama_index
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage_clause]
SQL > ALTER INDEX mahasiswa_idx
INITRANS 10;
Sintaks :ALTER INDEXnama_index_lama RENAME TOnama_index_baru;
ALTER INDEX
mahasiswa_idx RENAME
TO mhs_idx;
8/20/2019 Modul Prak BDL - TA_1516_Genap
48/53
43
Menghapus 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 WHERE propinsi=’Jawa
Barat’;
Pada saat melakukan query ini, index tidak akan
digunakan karena kolom pertama (kota) tidak digunakan dalam
klausa WHERE. Jika user sering melakukan query ini, maka
kolom index harus diurutkan menurut propinsi. Selain itu, proses
pencarian data akan lebih cepat jika data terletak pada block
tabel yang berdekatan daripada harus mencari di beberapa
datafile yang terletak pada block yang berbeda.
Misal pada perintah SQL berikut ini :
SELECT * FROM karyawan
WHERE id BETWEEN 1010 AND 2010;
Query ini akan melakukan “scan” terhadap sedikit data
block jika tabel karyawan diatas diurutkan berdasarkan kolom
id. Untuk mengurutkan berdasarkan kolom yang berbeda-beda
maka tabel disimpan dalam flat file, kemudian tabel diekspor
dan diurutkan sesuai kebutuhan.
Alternatif yang lain, bisa digunakan perintah untuk
membuat tabel lain yang memiliki urutan yang berbeda dari tabelasal, seperti perintah SQL berikut :
DROP INDEX nama_index;
Contoh :SQL > DROP INDEXmahasiswa_idx;
8/20/2019 Modul Prak BDL - TA_1516_Genap
49/53
44
CREATE TABLE karyawan_urut
AS SELECT * FROM karyawan
ORDER BY id;
Pada SQL diatas, tabel karyawan_urut berisi data
yang sama dengan tabel karyawan hanya datanya terurut
berdasarkan kolom id.
5.2. 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. Materialized View (MV)
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.
8/20/2019 Modul Prak BDL - TA_1516_Genap
50/53
45
Materialized view atau snapshotini digunakan pada
database terdistribusi untuk membuat aplikasi dengan
sinkronisasi data pada berbagai site maupun untuk data
warehouse yang mempersiapkan dan menyimpan data agregat. MV
meningkatkan kecepatan akses query melalui perkalkulasi join
dan operasi agregat sebelum menjalankan dan menyimpan
hasinya pada database. Ketika query terhaap MV dilakukan, query
optimizer akan mengetahui bilamana MV yang ada dapat
digunakan dan segera mengakses MV, bukan ke table detail
(query rewrite).
Membuat Materialized View
Privilege pembuatan MV haus di-grant secara langsung
jadi tidak melalui role. Untuk membuat MV pada Schema user
diperlukan priviledge system create materialized view dan
create table atau create any table serta previlege system
select any table. Sedangkan pembuatan MV pada schema user
lain memerlukan previledge system create any materialized view.
Untuk dapat membuat MV yang berisi summary jumlah
penduduk setiap kota dapat dibuat denagn cara berikut ini :
SQL> CREATE MATERIALIZED VIEW ivana.SNAP_KOTA
2 BUILD IMMEDIATE REFRESH FORCE
3 OF DEMAND AS
4 SELECT k.namakota, COUNT(p.nama)
jml_penduduk
5 FROM boy.kota k, boy.penduduk p
6 WHERE k.nokota=p.nokota
7 GROUP BY k.namakota;Materialize view created
Hasil :
SQL> SELECT * FROM ivana.Snap_kota;
NAMAKOTA JML_PENDUDUK
--------------------------------------------
Pontianak 700000
mempawak 1200000sintang 500000
8/20/2019 Modul Prak BDL - TA_1516_Genap
51/53
46
5.4. Sequence
Sequence digunakan untuk membangkitkan serangkaian
nilai serial yang unik.
Membuat Sequence
INCREMENT BY berfungsi untuk mendefinisikan jumlah
incrementasi
setiap kali terjadi penyisipan record.
START WITH berfungsi untuk mendefisikan bilangan awal yang
dibangkitkan.
NOMAXVALUE tidak ada batas maximum bilangan sequence
yang
digenerate.
MAXVALUE mendefinisikan maximum bilangan sequence yang
digenerate.
CYCLE mendefinisikan bahwa jika telah bilangan sequencetelah
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
8/20/2019 Modul Prak BDL - TA_1516_Genap
52/53
47
maximum, maka nilai akan diulang dari awal lagi
NOCYCLE tidak ada pengulangan bilangan bila telah sampai
nilai
maximum
CACHE bilangan sequence akan ditampung di buffer
NOCACHE bilangan sequence tidak akan ditampung di buffer.
Memodifikasi Sequence
Menghapus Sequence
ALTER SEQUENCE nama_sequence
[INCREMENT BY integer]
[START WITH integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CHACE | NOCHACE]SQL > ALTER SEQUENCE seq_bulan
INCREMENT BY 2;
DROP SEQUENCE nama_sequence;
8/20/2019 Modul Prak BDL - TA_1516_Genap
53/53
TUGAS PRAKTIKUM
1. Create view dengan nama DEPT50 yang berisi employee
number, employee last names and department number untuk
semua employee di department 50. Kolom-kolom view diberi
label sbb: EMPNO, EMPLOYEE, DEPNO
2. Tampilkan struktur dan isi dari DEPT50
3. Buatlah query untuk menampilkan 4 karyawan paling senior.
(Output: SENIOR, LAST_NAME, HIRE_DATE)
4. Cobalah drop view EMPLOYEE_VU dan DEPT50.
5. Create sebuah sequence yang akan digunakan pada kolom
primary key di tabel DEPT. Start 200, Max 1000, Increment 10.
Beri nama: DEPT_ID SEQ
6. Tuliskan SQL statement untuk melihat sequence_name,
min_value, max_value, increment_by dan last_number.
7. Tuliskan SQL statement untuk memasukkan 2 record ke dalam
tabel DEPT dengan menggunakan sequence DEPT_ID SEQ untuk
mengisikan department_id. (2 Department yang diinput
adalah: Education dan Administration)
8.
Pastikan kedua data sudah masuk dalam tabel DEPT9. Berapakah nilai department_id berikutnya?
10. Hapus sequence DEPT_ID SEQ
top related