Modul Praktikum PBD
Modul Praktikum PBD
BAB I
INSTALASI ORACLE
Tujuan
-
a. Pendahuluan
Oracle merupakan salah satu DBMS (Database Management System) populer saat ini.
Sebagai DBMS skala Enterprise, oracle digunakan oleh banyak perusahaan-perusahaan
besar di dunia. Salah satu versi oracle yang sering digunakan adalah oracle 10 G. Akan tetapi,
oracle 10 G membutuhkan spesifikasi komputer yang cukup tinggi. Untuk praktikum sistem
basisdata ini, akan menggunakan varian dari Oracle 10 G yaitu oracle XE (eXpress Editon).
Versi ini, diperuntukkan khusus dunia pendidikan. Spesifikasi komputer untuk menjalankan
Oracle XE ini tidak terlalu tinggi, dengan minimal 512, oracle versi ini sudah bisa dijalankan.
b. Instalasi Oracle XE
Untuk memulai instalasi oracle XE, klik master yang telah dicopy. Apabila telah dijalankan
maka akan muncul tampilan seperti berikut
Klik tombol Next untuk melanjutkan proses instalasi, setelah itu akan muncul tampilan
seperti dibawah ini
Pilih Accept the agreement dan kemudian klik Next, maka akan muncul tampilan seperti
berikut
Klik Next lagi jika ingin melanjutkan proses intalasi, maka akan muncul tampilan seperti
dibawah ini
Isi inputan password untuk user system dengan password yang anda inginkan. Misal isi
dengan jaringan. Setelah konfirmasi password silahkan klik next, dan ikuti petunjuk
berikutnya sampai proses instalasi selesai. Apabila proses instalasi selesai, maka akan
muncul tampilan seperti berikut
BAB II
ADMINISTRASI ORACLE XE
1. TUJUAN
Setelah mengikuti praktikum unit ini, praktikan diharapkan
1.
2.
3.
4.
Mampu memahami administrasi database, khususnya tentang user, privilege, dan role.
Mampu membuat user baru.
Mampu membuat/memberi privilege dan role
Mampu menerapkan kontrol akses dengan memberi role pada user.
Note :
Pada praktikum kali ini kita akan menggunakan SQL*Plus sehingga pembahasan langkah
praktikum selanjutnya akan menggunakan SQL*Plus saja.
Setelah window SQL*Plus command line terbuka, akan ada username dan password. Untuk
itu, Anda harus memasukkan username dan password. Ada user yang dibuat secara default
ketika proses instalasi, yang terpenting adalah user sys dan system dengan password sesuia
dengan password yang dimasukkan pada saat installasi. Perlu diingat untuk komputer client,
anda harus memasukkan password dengan password@nama_komputer_server. Kedua user
inilah yang paling vital karena mempunyai hak-hak tertinggi (privileges) dalam mengatur
database. Untuk alasan keamanan, maka password untuk kedua user ini harus segera diganti
setelah proses instalasi.
Ada cara lain untuk masuk ke database, yaitu dengan perintah CONN, contohnya:
-SQL> CONN
Enter user-name: [username]
Enter password: [*********]@[nama_komputer_server]
-atau
-SQL> CONN [username]/[password]@[ nama_komputer_server]
-Perintah:
-SQL> PASSW system
--
4. Beberapa versi Oracle sebelumnya tidak mendukung prosedur PASSW, maka untuk
melakukan penggantian password gunakan perintah sebagai berikut:
SQL> alter user [nama_user] identified by [password_baru];
Untuk diingat !
Untuk mengganti password, baik milik dirinya sendiri maupun milik user lain, setiap user
harus terkoneksi dengan database terlebih dahulu, dan jika user tersebut ingin dapat
mengganti password milik user lain, maka user tersebut harus mempunyai privilege
ALTER USER, jadi gunakan user yang mempunyai hak tersebut agar dapat merubah
password milik user lain. Jika ingin mengganti password miliknya sendiri, dirinya tidak
perlu mempunyai privilege ALTER USER.
Bagaimana seorang user bisa memiliki privilege tersebut, apa itu privilege & role, dan
bagaimana menggunakannya? Akan dibahas di sub bab berikutnya.
Disarankan, jangan menggunakan user sys atau system untuk membangun aplikasi database.
Kedua user ini digunakan untuk keperluan administratif. Selain itu, sangat beresiko untuk
memanipulasi data yang dimiliki kedua user ini karena data yang dimiliki kedua user ini
digunakan untuk mendukung jalannya database secara keseluruhan.
-Setelah perintah berhasil dijalankan maka akan terdaftar user baru dengan nama manajer
dengan password r4h4s1a. User ini belum memiliki privilege dan role apapun. Meskipun sudah
dibuat, tetapi user ini belum dapat melakukan koneksi ataupun menggunakan database. Untuk
ini perlu kita lakukan pemberian privilege dan role.
CONNECT
Umumnya role ini cukup untuk kebanyakan user biasa (common user), karena dalam role
ini terdapat privilege CREATE TABLE, CREATE VIEW, CREATE SEQUENCE, CREATE
SESSION, dll.
Privilege CREATE SESSION inilah yang digunakan apabila seorang user melakukan
mekanisme log-in atau koneksi ke database. Tanpa privilege ini, seorang user tidak dapat
masuk ke database meskipun user ini telah dibuat. (lihat sub bab 2.1)
RESOURCE
Secara umum role ini cukup bagi developer yang akan membuat objek PL/SQL (akan
dipelajari pada unit 6) seperti procedure dan sebagainya karena dalam role ini terdapat
privilege CREATE PROCEDURE, CREATE TRIGGER, dll.
-Perintah di atas menunjukan bahwa dengan perintah GRANT, user manager diberi hak akses
dengan batasan role CONNECT dan RESOURCE. Selain 2 role tersebut di atas, masih banyak lagi
predefined-role yang dimiliki Oracle.
Selain dengan role bawaan (predefined-role), kita juga dapat membuat role baru dengan
object/system privilege sesuai kebutuhan. Untuk membuat role baru gunakan perintah CREATE
ROLE. Beberapa object/system privileges
diantaranya :
INDEX mengizinkan user untuk membuat index suatu table yang sudah ada.
REFERENCES mengizinkan user untuk membuat (CREATE) atau mengubah (ALTER)
constratint foreign key yang mengacu ke table referensinya.
EXECUTE mengizinkan user untuk menjalankan stored procedure atau function (PL/SQL).
Untuk membuat role gunakan perintah CREATE ROLE seperti berikut ini:
-SQL> GRANT CREATE TABLE TO role_manajer;
-Perintah di atas akan memberikan tiga privilege ke dalam role_manajer. Setelah itu Anda
dapat memberikan role ini kepada user. Seperti contoh berikut ini:
-SQL> GRANT [nama_role] TO [nama_user];
-Contoh:
-SQL> GRANT role_manajer TO manajer;
--
Saat ini user manajer memiliki satu role yaitu role_manajer yang di dalamnya terdapat 3
privilege. Untuk mengambil/menghapus hak akses itu dari user, gunakan perintah REVOKE
seperti contoh berikut:
-SQL> REVOKE [nama_role] FROM [nama_user];
-Contoh:
-SQL> REVOKE role_manajer FROM manajer;
--
LANGKAH PRAKTIKUM
3.1 Membuat User Baru
1. Masuk ke database dengan user sys atau system,
2. Buat user baru dengan nama manajer_travel dengan password m4ut4u4j4
SQL> CREATE USER manajer_travel IDENTIFIED BY m4ut4u4j4;
3. Dengan cara yang sama ketika membuat user manajer_travel, buatlah juga user
karyawan_travel dan passwordnya ad4d3ch. Lalu berikan role CONNECT kepada user
karyawan_travel.
4. Setelah perintah di atas selesai, Anda ulangi koneksi ke database menggunakan user
yang telah dibuat, yaitu user manajer_travel, dengan perintah CONN.
-SQL> CONN manajer_travel/m4ut4u4j4@travel
--
Atau
-SQL> CONN
Enter user-name: manajer_travel
Enter password: m4ut4u4j4@travel
-5. Setelah terkoneksi dengan database, jalankan langkah berikut, yaitu membuat DDL dari
sebuah database.
-SQL> @A:\scriptsql\unit2.sql
-Perintah tersebut menjalankan script file yang ada di drive A. Script file disebutkan
lengkap dengan direktorinya. Setelah langkah ini dijalakan, user manajer_travel telah
membentuk beberapa table beserta isinya sesuai perintah yang terdapat dalam file
tersebut. (Isi dari script tersebut akan dipelajari pada bab berikutnya)
6. Setelah perintah di atas selesai, ulangi login dengan user karyawan_travel.
-SQL> CONN
Enter user-name: karyawan_travel
Enter password: ad4d3ch@travel
-7. Setelah terkoneksi dengan menggunakan user karyawan_travel, coba lakukan perintah
berikut ini untuk dapat mengakses table operasional, amati apa yang terjadi:
-SQL> SELECT * FROM operasional;
-8. Terjadi pesan kesalahan, table dianggap tidak ada, karena table operasional tersebut
dibuat oleh user manajer_travel, sedangkan user karyawan_travel tidak mempunyai
table apapun sehingga Oracle menganggap table tersebut tidak ada bagi user
karyawan_travel. Maka sekarang akan kita coba membuat sebuah ROLE agar user
karyawan_travel dapat mengakses table milik manajer_tarvel.
3.3 Membuat/Memberi Privilege dan Role
a. Buatlah ROLE akses, tentunya kita harus terkoneksi dengan database menggunakan user
yang memiliki hak untuk membuat ROLE (CREATE ROLE). Coba masuk dengan
menggunakan user sys, atau manajer_travel. Lakukan perintah di bawah ini:
-SQL> CREATE ROLE [nama_role] IDENTIFIED BY [password];
-Contoh:
-SQL> CREATE ROLE akses IDENTIFIED BY p4ssw0rd;
-Perintah:
-SQL> GRANT SELECT ON operasional TO akses;
--
Sekerang berarti kita telah memiliki sebuah ROLE yang di dalamnya terdapat sebuah
privilege SELECT ON OPERASIONAL. Anda dapat menambahkan privilege sesuai
kebutuhan.
b. Setelah Anda mempunyai ROLE AKSES, berikanlah role tersebut kepada user karyawan.
SQL> GRANT [nama_role] TO [nama_user];
Perintah:
Anda perhatikan, pada query ini user karyawan_travel harus mendefinikan nama
schema (manajer_travel) tempat table operasional berada.
d. Coba REVOKE role yang sudah diberikan kepada user karyawan_travel, dan lakukan
perintah:
SQL> SELECT * FROM manajer_travel.operasional;
BAB III
2. DASAR TEORI
Secara garis besar, software database dibagi menjadi Stand Alone Database dan Database
Server. Stand Alone database adalah seperangkat software database yang dijalankan dan diakses
computer yang tidak terhubung ke computer lain, contohnya adalah : Microsoft Acces, Adabas,
Paradox, Dbase. Sedangkan Database Server merupakan software database yang diperuntukkan
bagi jaringan computer, contohnya adalah : Oracle, IBM DB2, MS SQL Server, PosgreSQL, MySql,
FireBird dan Interbase. Database Server dapat menangani banyak user. Mengolah data yang
sangat banyak dan akses yang sangat cepat.
SQL*Plus merupakan tools standar Oracle untuk mengakses data Oracle secara interaktif.
Bentuk SQL*Plus adalah command line, yang dapat mengeksekusi perintah setiap kali perintah
diberikan.
2.1 SQL
SQL (Structured Query Language) yang di dalam dunia database istilah query dapat diartikan
permintaan data. SQL merupakan bahasa tingkat empat yang berfungsi menampilkan hasil atau
melakukan sesuatu pada data yang diinginkan. Dalam SQL kita tidak perlu mendefinisikan
bagaimana data itu diambil atau diproses, seperti halnya bahasa tingkat tiga (Pascal, Basic dll),
kita hanya perlu memberikan perintah mengenai data apa yang ingin diambil atau dieksekusi.
Sehingga kita tidak perlu memikirkan bagaimana proses data tersebut diambil atau dieksekusi,
cukup dengan meminta data apa yang ingin diambil atau dieksekusi.
SQL mempunyai dua kemampuan, yaitu sebagai Data Definition Language (DDL) dan
sebagai Data Manipulation Language (DML). Sebagai DDL, SQL digunakan untuk membentuk
struktur basisdata, misalnya tabel, index dan view. Sebagai DML, SQL dapat memanipulasi data
dalam basisdata, baik merupakan pemasukan (INSERT), penghapusan (DELETE), pembaruan
(UPDATE) atau pengambilan data (SELECT).
2.2 Tipe Data Sederhana
Berikut ini adalah beberapa tipe data yang sering digunakan
Tipe Data
Deskripsi
CHAR
VARCHAR2
NUMBER
DATE
Selain keempat tipe data di atas terdapat tipe data yang lain yaitu :
Modifikasi
ALTER TABLE nama_tabel ADD|MODIFY (nama_kolom tipe_kolom[size]);
Perintah untuk memodifikasi tabel, berupa penambahan kolom dan pengubahan tipe
data kolom.
Cacatan : pada Oracle kolom yang tercipta tidak dapat dihapus
Menghapus tabel
DROP TABLE nama_tabel;
Urutan pemberian data untuk tiap kolom harus sesuai dengan urutan kolom pada
tabel dan tiap kolom harus diisi, jika tidak maka kolom akan diisi dengan NULL
Jika ingin menambah baris dengan pemberian data pada kolom-kolom tertentu,
nama kolom tidak perlu urut sesuai urutan kolom pada tabel, yang perlu diperhatikan
adalah urutan pemberian data harus sesuai dengan urutan kolom yang disebut
sebelumnya. Perintah SQL nya adalah :
INSERT INTO nama_tabel (nama_kolom_n) VALUES (data_kolom_n);
Nama kolom disebutkan adalah nama kolom yang dilihat saja. Jika ingin melihat semua
kolom, nama-nama kolom dapat diganti dengan tanda *
-SELECT * FROM nama_tabel;
nama_kolom = data_perbandingan
Keterangan
Perbandingan dapat
menggunnakan operator
=,<,>,>=,<=,<>,!=
nama_kolom between
AND batas_akhir
batas_awal
nama_kolom
IN
(data_1,data_2,,data_n)
Update
UPDATE nama_tabel SET nama_kolom_n = data_kolom_n WHERE syarat;
Perintah UPDATE tanpa syarat akan mengubah data kolom di semua baris. Oleh karena
itu, sebelum memberikan perintah UPDATE, desarankan menguji syarat yang diberikan
dengan menggunakan perintah SELECT.
Delete (Menghapus baris dalam tabel)
DELETE nama_tabel WHERE syarat;
Perintah DELETE tanpa menghapus data dalam tabel. Oleh karena itu sebelum
memberikan perintah DELETE, disarankan menguji syarat yang akan diberikan denga
menggunakan perintah SELECT.
2.5 Commit dan Rollback
Pada Server basis data, semua hasil manipulasi data yang dilakukan tidak langsung ditulis
kedalam tabel, melainkan ditampung dalam suatu Buffer. Buffer tersebut dinamakan
Rollback Segment (RBS). Untuk menulis hasil manipulasi data yang ditampung dalam RBS ke
tabel yang sebenarnya diberikan perintah Commit.
Keuntungan pemakaian RBS terlihat jelas ketika hasil manipulasi data, mulai dari
perintah COMMIT sebelum hingga perintah manipulasi data yang terakhir diberikan, akan
dibatalkan. Perintah ROLLBACK digunakan untuk operasi pembatalan tersebut.
Perintah COMMIT diberikan ketika hasil manipulasi data diyakini sudah benar, sebelum
perintah COMMIT diberikan, hasil manipulasi data tidak akan terlihat oleh pemakai pada
session lain. Oleh karena itu, jika intensitas berbagai data antar pemakai cukup tinggi,
perintah COMMIT diberikan sesegera mungkin dengan terlebih dahulu meyakini bahwa hasil
manipulasi data sudah benar.
RBS bekerja untuk setiap session. Perintah COMMIT disuatu session tidak akan menjadi
hasil manipulasi data di session lain tertulis ke tabel. Demikian juga perintah ROLLBACK yang
diberikan di suatu session tidak akan membatalkan hasil manipulasi data di session lain.
2.6 Constraint
CONSTRAINT atau kekangan diberikan untuk membatasi data yang dapat dimasukan
kedalam tabel, tujuannya untuk menjaga integritas data atau integritas referensial.dengan
pemberian Constraint dalam skema basis data, maka validasi data pada aplikasi client yang
dibangun diatasnya dapat lebih sederhana.
Constraint dapat diberikan saat pembuatan tabel (CREATE TABEL),constraint tidak dapat
dimodifikasi, constraint hanya bisa ditambah dan dihapus. Constraint dapat diberi nama
atau tidak, jika tidak diberi nama Oracle akan memberikan nama dengan kode yang
dibangkitkan. Constraint dapat diaktifkan dan tidak diaktifkan.
Perintah Penghapusan Constraint diberikan saat ALTER TABEL, yakni:
DROP CONSTRAINT nama_constraint
Pengaktifan atau non pengaktifan Constraint diberikan saat ALTER TABEL, yakni :
ENABLE | DISABLE CONSTRAINT nama_constraint
Catatan : jika suatu Constraint yang non aktif diaktifkan dan data yang telah ada ternyata
melanggar Constraint tersebut,maka Constraint tidak mau diaktifkan. Untuk
DEFAULT cara menonaktifkannya berbeda, lihat bagian DEFAULT
Macam-macam Constraint :
Not Null
NOT NULL mecegah suatu kolom pada tabel tidak diberi nilai sama sekali atau kosong.
Jika kolom dengan Constraint NOT NULL tidak diberi data, maka Oracle akan
memunculkan pesan kesalahan.
Konvensi nama Constraintnya adalah : NN_NamaTabel_NamaKolom.
-Deklarasi saat CREATE TABEL adalah :
Nama_kolom tipe_kolom NOT NULL
Nama kolom tipe_kolom CONSTRAINT nama_costraint NOT NULL
Unique
Unique menjaga agar data pada suatu baris tidak terulang lagi pada baris yang lain.
Pesan error akan muncul jika diberikan data yang sama tetapi jika kolom yang
dideklarasikan sebagai UNIQUE masih bisa mempunyai lebih dari satu data NULL.
Konvensi nama Constraint nya adalah : UK_NamaTabel_NamaKolom.
--
Primary Key
PRIMARY KEY digunakan untuk membedakan satu baris dengan baris yang lain. PRIMARY
KEY yang diterapkan hanya pada satu kolom sama dengan memberikan Constraint NOT
NULL dan UNIQUE sekaligus pada kolom tersebut. Perbedaanya adalh Constraint
PRIMARY KEY membentuk index untuk kolom tersebut.
Konvensi nama Constraintnya adalah : PK_NamaTabel
Deklarasi Primary Key pada satu kolom saat CREATE TABEL adalah :
Nama_kolom tipe_kolom PRIMARY KEY
Nama_kolom tipe_kolom CONSTRAINT nama_constraint
CONSTRAINT nama_constraint PRIMARY KEY (nama_kolom)
PRIMARY
KEY
Constraint PRIMARY KEY dapat diterapkan pula pada beberapa kolom. Pada kasus ini,
data membentuk PRIMARY KEY sama dengan data pada baris-baris yang lain. Tapi
kombinasi data untuk semua kolom PRIMARY KEY akan unik untuk masing-masing baris.
Deklarasi PRIMARY KEY pada beberapa kolom saat CREATE TABEL adalah :
ADD CONSTRAINT nama_constraint PRIMARY KEY (nama_kolom_n)
Deklarasi PRIMARY KEY pada beberapa kolom saat ALTER TABEL adalah :
ADD CONSTRAINT nama_constraint PRIMARY KEY (nama_kolom_n)
Catatan : Hanya terdapat satu PRIMARY KEY untuk satu tabel, baik terbentuk satu
kolom atau beberapa kolom.
Foreign Key
FOREIGN KEY digunakan untuk menjaga integritas referensial dalam relasi parent_child.
Data pada tabel child mengacu ke data tabel parent. Data yang diacu pada tabel parent
hanya data pada kolom yang dikenai Constraint PRIMARY KEY atau UNIQUE. Constraint
FOREIGN KEY dapat diterapkan ke beberapa kolom, dengan syarat PRIMARY KEY yang
diacu pada tabel parent juga tersusun dari beberapa kolom.
Konvensi
Data pada tabel parent tidak dapat di update jika telah mempunyai child. Data pada
tabel parent tidak dapat dihapus, kecuali dengan pemberian pernyataan ON DELETE
CASCADE saat deklarasi Constraint FOREIGN KEY. Dengan pernyataan tersebut, jika data
pada tabel parent dihapus, maka semua data pada tabel child yang mengacu ke data
tersebut juga akan ikut dihapus.
Check
CHECK berguna untuk menguji apakah data sesuai dengan syarat yang harus dipenuhi.
Data akan ditolak jika tidak sesuai syarat yang diberikan pada Constraint CHECK. Syarat
pengujian dapat berupa :
- Daftar nilai, misal kolom jenis_kelamin hanya bisa menerima nilai (L,P)
- Rentang nilai, misal kolom usia hanya menerima nilai antara 1 hingga 120
- Syarat matematis, misal kolom lebar bisa diberi nilai jika Lebar <= Panjang -10
Konvensi nama Constraintnya adalah : CK_NamaTabel_NamaKolom
Deklarasi saat CREATE TABEL adalah :
nama_kolom tipe_kolom CHECK (syarat)
nama_kolom tipe_kolom CONSTRAINT nama_constraint CHECK (syarat)
CONSTRAINT nama_constraint CHECK (syarat)
Default
Default sebenarnya tidak termasuk kategori Constraint, karena tidak membatasi data
yang masuk ke dalam tabel. Dengan DEFAULT, nilai suatu kolom akan deberikan jika
penambahan data tidak secara eksplisit menyebutkan nilai untuk kolom tersebut.
Pemberian nilai NULL akan mencegah pemberian nilai DEFAULT yang ditetapkan.
Nama Kolom
Keterangan
1
2
3
Owner
Constraint_Name
Constraint_Type
4
5
6
7
Tabel_Name
Search_Condition
R_Owner
R_Constraint_Name
Delete_Rule
Status
Selain itu terdapat kamus data lain, yaitu USER_CONS_COLUMNS, yang menampilkan nama
tabel dan nama kolom tempat Constraint berlaku.
Perintah untuk melihatnya :
SELECT * FROM USER_CONS_COLUMNS;
Nama Kolom
Keterangan
1
2
3
4
Owner
Constraint_Name
Tabel_Name
Column_Name
Position
LANGKAH PRAKTIKUM
3.1 Pengenalan Editor SQL*Plus
Sebelum bekerja dengan server basis data Oracle, pemakai harus terlebih dahulu LogOn ke
sistem. Form LogOn muncul ketika SQL*Plus dimulai.
User Name
Password
Host String
Jika tidak ada masalah, maka di layar editor muncul keterangan bahwa koneksi ke server
telah terbentuk dan disertai prompt SQL>. Untuk LogOut dan menutup SQL*Plus ketik Exit.
Di SQL*Plus terdapat perbedaan dalam mengakhiri penulisan perintah, yaitu:
Perintah SQL harus diakhiri dengan tanda titik koma (;)
Contoh, untuk melihat tabel-tabel yang ada pada suatu skema :
SELECT * FROM tab; [enter]
Perintah bawaan SQL*Plus tidak harus diakhiri dengan tanda titik koma. Pemberian titik
koma tidak mempengaruhi hasil eksekusi perintah.
Contoh, menutup dan membuka session (disconnect dan connect)
DISC
atau
disc;
[enter]
CONN
atau
conn;
[enter]
Catatan :
Dalam panduan praktikum ini, untuk menghindari kesalahan, semua perintah akan diakhiri
dengan tanda titik koma dan diakhiri dengan [enter].
Jika tombol [enter] ditekan sebelum perintah SQL diakhiri tanda titik koma, maka akan
muncul baris baru dengan nomor baris. Cara ini digunakan untuk permberian perintah yang
panjang atau komplek. Dengan menuliskan perintah sebagai beberapa baris diharapkan
perintah dapat dibaca lebih mudah.
-SELECT *
[enter]
FROM tab
[enter]
-Perintah SQL yang terakhir diberikan dapat diedit dengan editor eksternal (misal:notepad)
-Edit;
-Catatan :
Perintah SQL yang ditulis pada editor eksternal tidak diakhiri dengan titik koma,
untuk membersihkan area kerja editor gunakan shortkey shift + Del.
Penting diketahui juga bahwa sintaks SQL*Plus bersifat non case sensitive, kecuali terhadap
data.
table
primary key,
trayek(kd_trayek
varchar2(6)
constraint
pk_trayek
Untuk melihat apakah kita berhasil membuat tabel trayek, ketik perintah berikut
-SELECT * FROM tab;
DESCRIBE trayek;
atau
DESC trayek;
table
jadwal(kd_jadwal
varchar2(6)
constraint
table
supir(kd_supir
key,nama
varchar2(6)
varchar2(20),alamat
constraint
pk_supir
varchar2(30),telepon
varchar2(15));
table
mobil(plat_no
varchar2(6)
constraint
pk_mobil
primary key,
jenis varchar2(15),tahun varchar2(5),kapasitas integer);
foreign
key(kode_trayek)
references
constraint
fk_jadwal
jadwal (kd_jadwal),
foreign
key(kode_jadwal)
references
DESC supir;
into
supir
values('SP001','ABIMANYU','JL.KALIURANG
KM
15','0274-88888');
insert into supir values('SP002','AFIF','JL.DIPONEGORO',
'0274-44444');
-Perintah INSERT yang ketiga gagal dieksekusi karena kolom kd_supir terdefinisi sebagai NOT
NULL dan UNIQUE yang diberikan constraint PRIMARY KEY.
insert
into
operasional
values('OP001','22-AUG-
2014','TR001','JD001','SP001','AB003');
Perintah INSERT tersebut gagal dieksekusi karena kolom plat_no terdefinisi sebagai
kolom yang diberikan constraint PRIMARY KEY, sedangkan tabel mobil belum ada isinya atau
bagaimana mungkin sebuah travel agent mau beroperasi sedangkan mobilnya belum dibeli.
Kenapa error..?
varchar2(15),tahun
varchar2(5),kapasitas
integer
check
Menon-aktifkan Constraint
ALTER TABLE mobil DISABLE CONSTRAINT ck_kapasitas;
4. LATIHAN
Tuliskan sintak SQL untuk menampilkan semua nama supir yang beroperasi pada hari senin jam
08.00.
Tampilkan data pada tabel mobil kemudian lakukan update data , dimana mobil dengan plat
AB3215 jenisnya MITSUBISHI.
BAB IV
PERINTAH SQL LANJUT, INDEX, VIEW
1. TUJUAN
Setelah mengikuti praktikum ini, diharapkan praktikan :
1.
2.
3.
4.
Mampu memanipulasi data antar tabel dengan SQL yang lebih kompleks
Mampu memanipulasi data tabel sebagai himpunan
Memahami konsep dan penerapan index dan view
Mengetahui cara membaca Kamus data Index dan View
2. DASAR TEORI
Join
Join merupakan istilah yang digunakan untuk menggambarkan relasi yang terjadi antara satu
tabel dengan tabel lainnya. Untuk menghubungkan satu tabel dengan tabel lainnya (merelasikan
tabel) harus terdapat suatu field pada tabel yang berfungsi sebagai foreign key. Dengan foreign
key inilah kemudian suatu tabel berelasi dengan tabel yang lain. Tabel yang memiliki foreign key
kemudian dikenal dengan child table, sedangkan tabel tempat referensi foreign key dikenal
dengan parent table.
Dalam menerapkan Join, pada query harus terdapat syarat relasi dengan menggunakan
klausa where. Syarat yang disertakan mengandung kolom foreign key pada child dan
referensinya pada parent. Untuk menghindari kerancuan query, maka nama tabel harus
disebutkan sebelum nama field sehingga oracle dapat menentukan hasil query secara benar.
Berikut ini sintaks penulisan join pada SQL Plus
where
Outer Join
Pada perintah select untuk join diatas, data akan ditampilkan apabila pada kedua tabel yang
membentuk hubungan parent dan child terdapat data yang sama dengan syarat. Apabila tabel
parent tidak mempunyai data yang sama pada tabel child sebagai syaratnya maka data parent
tidak akan ditampilkan. Model join seperti ini dikenal dengan Inner Join. Agar data parent tetap
ditampilkan meskipun pada child tidak terdapat data tersebut maka kita bisa menggunakan
outer join. Sedangkan kemungkinan data child tidak memiliki parent terjadi apabila relasi yang
dibentuk tidak disertai dengan deklarasi constraint foreign key. Berikut ini sintaks penggunaan
foreign key :
-Select
*
from
nama_tabel_parent,nama_tabel_child
nama_tabel_parent.nama_kolom=nama_tabel_child.nama_kolom(+);
where
select
*
from
nama_tabel_parent,nama_tabel_child
nama_tabel_parent.nama_kolom(+)=nama_tabel_child.nama_kolom;
where
-Ada 2 hal yang harus diperhatikan dalam menggunakan operator berorientasi himpunan,
yaitu :
Jumlah kolom/ekspresi setiap komponen query harus sama, begitu juga dengan tipe
data ekspresi yang berkoresponden antara komponen query yang satu dengan
komponen query lainnya harus cocok.
Semua operator himpunan mempunyai prioritas yang sama. Jika pada compound
query memiliki lebih dari satu operator himpunan maka pengerjaannya dimulai dari
kiri ke kanan. Untuk mengatasi hal ini, bisa digunakan tanda kurung yang
menunjukkan prioritas operator.
Menggunakan Subquery
Didalam sebuah query bisa disisipkan sebuah query yang lain setelah klausa where.
Query sisipan ini sering disebut dengan istilah subquery. Jadi subquery merupakan sebuah
query yang berada di dalam query yang lain. Penggunaan subquery bisa didalam operasi
select, insert, update maupun delete. Yang harus diperhatikan dalam penggunaan subquery
ini yaitu tipe data kolom yang menjadi syarat harus sama dengan tipe data kolom yang
dihasilkan dari perintah select yang kedua.
Berikut ini sintaks penulisan subquery :
-select nama_kolom1,nama_kolom2[,] from nama_tabel1 where nama_kolom1
in(select nama_kolom1 from nama_tabel2 where syarat);
update nama_tabel1 set nama_kolom_n=data_kolom_n[,]
where nama_kolom_n in(select nama_kolom_n
from nama_tabel2 where syarat);
delete nama_tabel1 where nama_kolom_n in(select nama_kolom_n
from nama_tabel2 where syarat);
--
Index
Index adalah suatu objek tabel yang berisi catatan dari nilai nilai yang muncul pada satu
kolom atau kombinasi kolom yang di index dari suatu tabel. Index dibuat dengan tujuan
untuk mempercepat proses pencarian dan pengurutan data pada kolom dari suatu tabel
yang sering diakses.
Untuk membuat index bisa dilakukan secara otomatis dan manual.
Index yang dibuat secara otomatis biasanya terletak pada primary key yang didefinisikan. Ini
artinya setiap primary key pasti merupakan index dari tabel yang bersangkutan.
Untuk membuat index secara manual dilakukan dengan menggunakan script berikut :
create index nama_index on nama_tabel(nama_kolom);
Kalau kita ingin mengganti nama index yang telah dibentuk, bisa digunakan sintaks berikut :
alter index nama_index rename to nama_index_baru;
View
View adalah tabel logic yang sumber datanya berasal dari satu atau lebih tabel atau
view lainnya. View merupakan query yang disimpan dalam suatu database (stored query).
Ada beberapa manfaat dari view, yaitu antara lain :
View dapat membatasi akses user ke sumber data view (base table) karena view
sudah menunjukkan hasil dari suatu seleksi.
View membantu user untuk melakukan query yang sederhana dengan hanya
memanggil view untuk query yang kompleks
View dapat digunakan untuk menghindarkan akses langsung pada tabel yang
diproteksi.
View dapat menyediakan data yang independen.
Sintaks untuk membuat view yaitu :
CREATE [OR REPLACE] VIEW nama_view AS
perintah_select_yang_diinginkan;
-CREATE digunakan untuk membuat view yang baru, klausa OR REPLACE disertakan
dengan tujuan apabila view dengan nama nama_view telah ada maka view yang baru
hanya akan mereplace view yang lama.
Untuk memastikan validitas suatu view setelah terjadinya operasi pada base tablenya bisa
digunakan statement alter view seperti pada statemen berikut :
alter view nama_view COMPILE;
Sedangkan untuk menghapus view, bisa digunakan statement DROP VIEW. Bentuk umum
statemen tersebut yaitu :
DROP VIEW nama_view;
Kamus Data
Kamus data digunakan untuk melihat objek objek database yang telah dibuat, terdapat dua
macam kamus data, yaitu kamus data Index dan kamus data View.
Kamus data Index
Untuk melihat index yang telah dibuat, terdapat dua kamus data yaitu USER_INDEXES
dan USER_ID_COLUMNS.
Untuk menampilkan isi dari kamus data USER_INDEXES gunakan statement berikut :
select * from USER_INDEXES;
Nama_Kolom
INDEX_NAME
TABLE_OWNER
TABLE_NAME
UNIQUENESS
Keterangan
Nama Index
Nama user pemilik tabel
Nama tabel tempat Index
Sifat Index, apakah Uniq atau tidak
Pada kamus data USER_INDEXES, selain memunculkan index yang dibuat secara manual,
juga disertakan index yang dibuat pada waktu pendeklarasian primary key.
Sedangkan untuk menampilkan kamus data USER_IND_COLUMNS, bisa digunakan statement
berikut :
select * from USER_IND_COLUMNS;
Nama Kolom
INDEX_NAME
TABLE_NAME
COLUMN_NAME
COLUMN POSITION
Keterangan
Nama Index
Nama tabel tempat Index
Nama kolom tempat Index
Urutan kolom saat deklarasi Index
Nama Kolom
VIEW_NAME
TEXT
Keterangan
Nama view
Perintah select untuk membentuk view.
LANGKAH PRAKTIKUM
Join
Program berikut akan menampilkan nama pemesan dan tanggal keberangkatannya.
Langkah langkah
Latihan
Buatlah join yang menampilkan nama pemesan, tanggal pemesanan, tanggal keberangkatan,
tujuan, hari berangkatnya dan jam keberangkatan pemesan yang berangkat pada tanggal 22
agustus 2014.
-select p.no_fak,p.nama_pemesan,p.kode_operasi,
o.tgl_berangkat from operasional o,pesan p
where o.kd_operasi=p.kode_operasi;
--
Outer Join
Sebelumnya masukkan data pada tabel operasional sebagai parent dari tabel pesan.
insert into operasional(kd_operasi) values('OP016');
--
Menggunakan Subquery
Amati implementasi perintah yang menggunakan subquery setelah klause where berikut ini :
--
-Index
Implementasi index yang diterapkan pada tabel pesan kolom nama_pemesan :
create index index_nama on pesan(nama_pemesan);
View
Pada implementasi view berikut, akan dibuat suatu view untuk memilih tujuan
keberangkatan dan tarif kendaraan yang berangkat pada tanggal 23 agustus 2014.
-create view vw_keberangkatan as
select t.jalur,t.tarif,o.tgl_berangkat
from trayek t,operasional o
where t.kd_trayek=o.kode_trayek and o.tgl_berangkat='23-aug-14';
View yang telah anda buat tadi akan dimasukkan dalam daftar tabel yang terdapat pada
database. Untuk melihat view ketikkan perintah berikut :
select * from tab;
Latihan
1. Buatlah view dengan nama vw_supir yang menampilkan nama supir, alamat supir, jenis
mobil yang digunakan supir, kapasitas mobil, tujuan keberangkatan dan tanggal
keberangkatan yang berangkatnya pada tanggal 21 agustus 2014.
2. Buatlah index pada kolom nama supir pada view vw supir , lalu jelaskan apa yang terjadi !
BAB V
FUNGSI BAWAAN ORACLE &
SEQUENCE
1.
TUJUAN
Setelah mengikuti unit praktikum ini, praktikan :
2.
a.
b.
c.
d.
DASAR TEORI
Dalam manipulasi data, sering diperlukan fungsi-fungsi standar untuk mengetahui
informasi lain yang tidak tersimpan secara eksplisit di dalam basis data. Di Oracle, fungsi hanya
berlaku terhadap data hasil query. Misal, fungsi MAX diberikan pada perintah SELECT
bersyarat, maka nilai maksimal yang diperoleh relatif terhadap nilai lain hanya pada hasil
pengambilan data tersebut. Dimungkinkan masih ada nilai yang lebih besar daripada nilai
tersebut, tetapi tidak memenuhi syarat query.
No
1
2
3
4
5
6
Nama Fungsi
AVG (num)
COUNT (num)
MAX (num)
MIN (num)
STDDEV(num)
SUM (num)
Keterangan
Nilai rata-rata, tanpa mengikutkan nilai null
Cacah baris
Nilai maksimal
Nilai minmial
Standar deviasi, tanpa mengikutkan nilai null
Penjumlahan nilai
VARIANCE(num)
Pada perintah select terdapat parameter pengambilan data berupa : ALL atau DISTINCT.
Parameter ALL menampilkan semua data, meski ada duplikasi, sedangkan parameter DISTINCT
hanya menampilkan data satu kali jika ada duplikasi. Jika parameter pengambilan data tidak
dituliskan maka parameter default yang dipakai adalah ALL.
Bentuk dasar penulisan, tanpa pemberian fungsi, adalah :
-SELECT [ALL | DISTINCT] nama_kolom FROM nama_tabel;
-Pemberian parameter pengambilan data tersebut dapat diberikan di luar atau di dalam fungsi :
-SELECT [ALL | DISTINCT] nama_fungsi ([ALL | DISTINCT] nama_kolom)
FROM nama_tabel;
Nama Fungsi
ABS(num)
CEIL(num)
COS(num)
COSH(num)
EXP(num)
FLOOR(num)
LN(num)
LOG(num2,num1)
MOD(num2,num1)
POWER(num2,num1)
ROUND(num1[,num2])
SIGN(num)
SIN(num)
SINH(num)
SQRT(NUM)
TAN(num)
TANH(num)
18
TRUNC(num1[,num2])
Keterangan
Nilai absolut (mutlak)
Pembulatan ke atas
Cosinus (dalam radian)
Cosinus hiperbolik
Bilangan eksponensial (e) pangkat sebesar num
Pembulatan ke bawah
Logaritma bilangan alami (e)
Logaritma num1 dengan basis bilangan bilangan num2
Sisa pembagian (modulus) dari num2 dibagi num1
num2 pangkat num1
Pembulatan num1 kepresisi digit sebesar num2
Tanda negatif, positif atau nol dari num
Sinus (dalam radian)
Sinus hiperbolik
Akar Kuadrat
Tangen
Tangen hiperbolik
Memotong presisi digit bilangan num1 menjadi sebesar
num2
Selain mengunakan fungsi-fungsi tersebut, data dapat dioperasikan dengan operator standar
aritmatika, yaitu : penjumlahan (+), pengurangan (-), perkalian (*), dan pembagian (/)
Fungsi-fungsi string dikelompokkan menjadi dua kategori, yaitu fungsi dengan keluaran
berupa string dan fungsi dengan keluaran berupa bilangan.
Fungsi-fungsi dengan keluaran berupa string, antara lain :
No
1
Nama Fungsi
CHR(num)
CONCAT(str1,str2)
3
4
5
6
7
INITCAP(str)
LOWER(str)
LTRIM(str)
REPLACE(str,str_cari,str_ganti)
RTRIM(str)
SUBSTR(str,num2[,num1])
UPPER(str)
Keterangan
Karakter dari bilangan ASCII = num
Penggabungan dua buah string, yaitu string1 dan
string2
Huruf pertama tiap kata menjadi huruf kapital
Semua huruf menjadi huruf kecil
Membuang spasi yang berada di kiri str
Mengganti str_cari dengan str_ganti pada str
Membuang spasi yang berada di kanan str
Mengambil dari str sebanyak num1 mulai dari
posisi num2
Semua huruf menjadi huruf besar
Nama Fungsi
ASCII(str)
LENTGH(str)
Keterangan
Nilai ASCII dari str, hanya diambil dari karakter pertama
Cacah karakter dalam str
Nama Fungsi
Keterangan
ADD_MONTHS (date,num)
LAST_DAY(date)
MONTHS_BETWEEN(date1,date
2)
NEXT_DAY(date,str)
SYSDATE
Nama Fungsi
TO_CHAR(date,fmt)
TO_DATE(str,fmt)
TO_NUMBER(str)
NVL(exp1,exp2)
DECODE(exp,kode1,arti1[kode2,arti2])
Keterangan
Mengubah tipe date ke char, dengan format
fmt
Mengubah tipe char ke date, dengan format
fmt
Mengubah tipe str ke number
Jika exp1=null maka tampilkan exp2, jika
tidak tampilkan exp1
Memberi arti kode pada kolom exp, kode1
ditampilkan sebagai arti1
dd
mm
month
mon
yy
yyyy
Format Tanggal
day:tanggal(1..31, sesuai bulannya)
month : bulan(1..12)
month : bulan(January..December)
month : bulan(Jan..Dec)
year : tahun 2 digit
year : tahun 4 digit
hh
mi
ss
pm
Format Jam
hour : jam(1..12)
minute : menit(0..59)
second : detik(0..59)
AM atau PM
2.5 Sequence
Sequence adalah objek database untuk membuat nilai bilangan bulat sesuai aturan saat
objek ini dibuat. Kegunaan sequence yang sering digunakan adalah untuk membuat
penomoran yang terurut secara otomatis.
Berikut adalah SQL Statement untuk membuat sequence :
CREATE SEQUENCE nama_sequence
START WITH n
INCREMENT BY n
MINVALUE n
MAXVALUE n
CYCLE
CACHE n
No
Nama Kolom
START WITH n
INCREMENT BY n
MINVALUE n
MAXVALUE n
CYCLE
CACHE n
Keterangan
Mendefinisikan nilai awal sequence dimana n adalah nilai
awal sequence
Mendefinisikan perubahan nilai sequence
Mendefinisikan nilai minimal sequence. Secara default, tidak
ada nilai minimal (NOMINVALUE)
Mendefinisikan nilai maksimal sequence. Secara default,
tidak ada nilai maksimal (NOMAXVALUE)
Membuat sequence mengulang nilai awal jika nilai
MINVALUE atau MAXVALUE telah dicapai. Secara default,
tidak akan diulang (NOCYCLE)
Menyimpan sejumlah n nilai sequence untuk meningkatkan
kecepatan
3.
LANGKAH PRAKTIKUM
3.1 Parameter ALL dan DISTINCT
Amati perbedaan data untuk perintah-perintah select berikut :
SELECT hari FROM jadwal;
SELECT ALL hari FROM jadwal;
SELECT DISTINCT hari FROM jadwal;
POWER
SELECT POWER(3,2)"3^2", POWER(4,2)"4^2", POWER(5,2)"5^2"
FROM dual;
satuan radian. 30 dikalikan dengan nilai ( = 3.14159265) lalu dibagi dengan 180. 1 radian =
180 /
3.4 Fungsi String
LOWER, UPPER dan INITCAP
SELECT LOWER(nama), UPPER(nama), INITCAP(nama)
FROM supir;
CONCAT
SELECT CONCAT(nama,alamat), nama ||' : '|| alamat
FROM supir;
REPLACE
SELECT alamat, REPLACE(alamat,'O','OE') REPLACE
FROM supir;
Coba ketikkan perintah SYSDATE berikut, dan perhatikan perbedaan format tanggal dengan
perintah sysdate sebelumnya :
-SELECT SYSDATE "Tanggal Sekarang",
SYSDATE+3 "Tambah 3 hari",
SYSDATE-2 "Kurang 2 hari"
FROM dual;
Pada tabel PESAN terdapat kolom ALAMAT_PEMESAN yang nilainya boleh null, yang berarti
alamat pemesan tidak diketahui. Tampilkan keterangan tersebut dengan perintah berikut :
SELECT no_fak, kode_operasi, tgl_fak, nama_pemesan,
NVL(alamat_pemesan,'Alamat tidak diketahui') FROM pesan;
3.7 Sequence
Buatlah sequence sebagai berikut :
CREATE SEQUENCE SQ_PESAN
START WITH 12 INCREMENT BY 1;
Untuk menguji apakah SQ_PESAN sudah membuat penomoran pesan menjadi terurut secara
otomatis, maka coba masukkan data seperti di bawah ini :
Keterangan : FK0 dibaca : F-K-Nol
INSERT INTO pesan
VALUES('FK0'||SQ_PESAN.NEXTVAL, 'OP001','21-AUG2014','JOKO','jl.kaliurang km 16');
4.
LATIHAN PRAKTIKUM
a. Tampilkan banyaknya jumlah pemesan yang bernama BENI
b. Buatlah sebuah sequence untuk mengurutkan kode operasional pada tabel operasional
(lihat baris data terakhir pada tabel, untuk menentukan urutan selanjutnya !), kemudian
uji sequence tersebut dengan memasukkan data pada tabel operasional.
c. Perhatikan ketiga tabel di bawah :
TABEL OPERASIONAL
KD_OPERASI
TGL_BERANGKAT
KODE_TRAYEK
KODE_JADWAL
KODE_SUPIR
KODE_MOBIL
OP001
22/08/2014
TR001
JD001
SP001
AB004
OP002
22/08/2014
TR003
JD002
SP002
AB002
OP003
22/08/2014
TR002
JD003
SP003
AB001
OP004
22/08/2014
TR005
JD004
SP004
AB003
OP005
22/08/2014
TR004
JD005
SP005
AB005
OP006
23/08/2014
TR001
JD001
SP001
AB004
TABEL PESAN
NO_FAK
KODE_OPERASI
TGL_FAK
NAMA_PEMESAN
ALAMAT_PEMESAN
FK001
OP001
21/08/2014
BONO
jl.kaliurang km 10
FK002
OP001
21/08/2014
DODI
jl.mangkubumi
FK003
OP001
21/08/2014
BONIE
jl.magelang
FK004
OP002
21/08/2014
BENI
jokteng kulon
FK005
OP002
21/08/2014
ONNIE
Candikarang
FK006
OP001
22/08/2014
DESI
jl.magelang km 12
TABEL TRAYEK
KD_TRAYEK
TUJUAN
TARIF
TR001
SURABAYA
70000
TR002
TEGAL
50000
TR003
BANDUNG
60000
TR004
PURWOKERTO
40000
TR005
MALANG
50000
pendapatan yang masuk dari pemesan yang tujuan perjalanannya ke SURABAYA (gunakan
perintah JOIN yang telah dipelajari pada unit-unit sebelumnya )