Anda di halaman 1dari 47

2014

Modul Praktikum Pengantar


Basisdata (ORACLE)

Lasmedi Afuan, ST.,M.Cs


Teknik Informatika
1/1/2011

STRUKTUR TABEL YANG DIGUNAKAN DALAM PRAKTIKUM INI

BAB I
INSTALASI ORACLE
Tujuan
-

Praktikan memahami konsep DBA dalam oracle


Dapat melakukan instalasi dan konfigurasi oracle

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.

2. KONFIGURASI SETELAH INSTALASI


Setelah instalasi dan koneksi (jika menggunakan client-server) dari client ke server database
selesai, Oracle XE sudah siap untuk digunakan. Untuk dapat berinteraksi langsung dengan
database Oracle XE, Anda dapat menggunakan SQL*Plus ataupun i-SQL*Plus dari komputer
client maupun dari komputer server. SQL*Plus adalah interface yang berbasis command line
yang menghubungkan user dengan database, dimana user dapat melakukan perintah-perintah
query baik SQL standar, SQL bawaan Oracle (PL/SQL), dan perintah-perintah lainnya, sama
halnya dengan i-SQL*Plus yang merupakan fasilitas baru dari Oracle versi 10 keatas (Oracle 10g
atau Oracle XE), yang membedakannya adalah i-SQL*Plus berbasis browser.
Untuk dapat membuka SQL*Plus langkahnya adalah sebagai berikut: klik Start Program
Oracle Database 10g Express Edition Run SQL Command Line. Atau juga melalui, Start
Run Open : sqlplus OK, window SQL*Plus command line akan tampil.
Sedangkan untuk dapat membuka e-SQL*Plus adalah :
1. untuk komputer yang menginstall oracle sever,caranya : klik Start Program Oracle
Database 10g Express Edition Go To Database Homepage Login (dengan mengisikan
username dan password) SQL SQL Command Enter Command.
2. untuk komputer client, caranya : buka browser ketikkan alamat pada address bar
http://nama-komputer-server
atau
ipaddress-komputer-server:nomor_
port_yang_diakses/apex/
(contoh : http://10.0.1.100:8080/apex/) Login (dengan mengisikan username dan
password) SQL SQL Command Enter Command.

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]

-Sedangkan cara mengubah password adalah sebagai berikut:


1. Buka SQL*Plus.
2. Selanjutnya lakukan koneksi ke database dengan account sys atau system.
3. Setelah terkoneksi, pada promt SQL ( SQL> ) ketikkan perintah sebagai berikut:
-SQl> PASSW [nama_user]

-Perintah:
-SQL> PASSW system

-Masukkan password lama, kemudian masukkan password baru misalnya oraclesys,


setelah itu ketikkan password baru ini sekali lagi sebagai verifikasi.
-Changing password for sys
Old password : *****************
New password : *********
Retype password : *********

--

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.

2.1 Membuat User Baru


Pengguna Oracle pada awalnya merupakan user tanpa role, yang berinteraksi langsung
dengan database, baik untuk keperluan development maupun administratif. Anda harus terlebih
dahulu terkoneksi dengan database untuk membuat user baru dan tentunya Anda harus
mempunyai privilege CREATE USER, maka gunakan user sys atau system.
Perintah pembuatan user adalah:
-SQL> CREATE USER [nama_user] IDENTIFIED BY [password];

-Berikut ini contoh perintah pembuatan user :


-SQL> CREATE USER manajer IDENTIFIED BY r4h4s1a;

-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.

2.2 Kontrol Akses dengan Privilege dan Role


Untuk menangani keamanan data dan sistem dalam database, Oracle mengatur antara
memberi dan melarang akses kepada user terhadap suatu objek database dan fungsi tertentu.
Oracle menerapkan suatu mekanisme kontrol akses setelah user berhasil dibuat/terdaftar dalam
DBMS.
Selain dengan autentifikasi password pada setiap user, model keamanan database Oracle
yang lain adalah dengan pengendalian hak akses user ketika terkoneksi dengan database
(profile) dan ketika melakukan manipulasi terhadap objek (object privilege) dan sistem (system
privilege) database. Pengendalian ini termasuk berapa lama seorang user dapat terkoneksi
dengan database dengan keadaan idle, berapa lama password seorang user dapat expired
sehingga harus diganti dengan yang baru, objek atau sistem apa saja yang dapat diakses,
seberapa besar hak akses terhadap objek atau sistem, objek atau sistem apa saja yang dapat
dibuat oleh user, dll. Yang akan dibahas saat ini adalah kontrol akses dengan menggunakan
privilege dan role.
Saat database menjadi sangat besar, pemberian privilege kepada user akan semakin
kompleks. Untuk mempermudah pengaturan privilege, Anda dapat menggunakan role. Role
berfungsi untuk mengelompokkan beberapa privilege sekaligus. Hal ini akan mempermudah
untuk nantinya diberikan kepada sekelompok user yang memiliki hak akses yang sama (privileges
yang sama).
Oracle telah menyediakan role bawaan atau predefined-role. Anda dapat langsung
menggunakan role ini. Berikut ini adalah beberapa role yang tersedia di Oracle dan sering
digunakan:

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.

Perhatikan contoh berikut:


-SQL> GRANT CONNECT, RESOURCE TO manajer;

-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 :

CREATE mengizinkan user untuk membuat table, sequence, view.


SELECT mengizinkan user untuk mengambil data dari table, sequence, view.
INSERT mengizinkan user untuk memasukkan data dari table atau view.
UPDATE mengizinkan user untuk meng-update data dari table atau view.
DELETE mengizinkan user untuk menghapus data dari table atau view.
ALTER mengizinkan user untuk merubah struktur suatu table atau sequence.
Privilege ini, selain unttuk table dan sequence termasuk ke dalam system privilege.

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;

SQL> GRANT SELECT ON mobil TO role_manajer;

SQL> GRANT UPDATE TABLE ON mobil 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;

Kemudian user tersebut Anda beri role CONNECT dan RESOURCE.


SQL> GRANT CONNECT, RESOURCE TO manajer_travel;

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;

-Berikan privilege SELECT untuk table operasional kepada ROLE AKSES.


-SQL> GRANT [privilege] TO [nama_role];

-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:

SQL> GRANT akses TO karyawan_travel;

c. Setelah role diberikan kepada user karyawan_travel, lakukan koneksi ke database


dengan menggunakan user karyawan_travel. Kemudian lakukan perintah:
SQL> SELECT * FROM manajer_travel.operasional;

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;

Amati apa yang terjadi.

BAB III

PENGENALAN EDITOR, PERINTAH DASAR SQL&DEKLARASI


CONSTRAINT
1. TUJUAN
Setelah mengikuti Praktikum ini, Praktikan diharapkan :
1.
2.
3.
4.

Mengenal editor SQL*Plus


Mampu membuat, memodifikasi dan menghapus tabel
Mampu memanipulasi data dengan SQL sederhana
Memahami konsep dan penerapan commit dan Rollback

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

Berisi karakter-karakter berukuran tetap dengan panjang maksimum 2000


bytes

VARCHAR2
NUMBER
DATE

Berisi variable karakter dengan panjang maksimum 4000 karakter


Berisi data numeric atau bilangan. Baik merupakan bilangan bulat, fixedpoint atau floating point
Berisi data tanggal. Format default untuk kolom ini adalah DD-MON-YY.
(Contoh : 25-MEI-85)

Selain keempat tipe data di atas terdapat tipe data yang lain yaitu :

Karakter : NCHAR, NVARCHAR2, CLOB, NCLOB dan LONG


Biner : BLOB, BFILE, RAW, LONGRAW, ROWID dan MLSLABEL

2.3 Membuat, Memodifikasi dan Menghapus Tabel


Membuat tabel
CREATE TABLE nama_tabel (nama_kolom tipe_kolom[size]);

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;

2.4 Manipulasi Data : INSERT, SELECT, UPDATE dan DELETE


Insert
Perintah SQL untuk menambah baris data baru ke dalam tabel adalah
INSERT
INTO nama_tabel VALUES
(data_kolom_1,data_kolom_2,...,data_kolom_n);

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);

Select (perintah mengambil data dari tabel)


SELECT nama_kolom_n FROM nama_tabel;

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;

-Syarat pengambilan data dapat berupa


Syarat Pengambilan Data
Perbandingan matematis atau karakter.
Ex:

nama_kolom = data_perbandingan

Keterangan
Perbandingan dapat
menggunnakan operator
=,<,>,>=,<=,<>,!=

Data dalam rentang nilai

nama_kolom between
AND batas_akhir

batas_awal

Data dalam dafatar nilai

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

-Deklarasi saat ALTER TABEL adalah :


MODIFY (nama_kolom tipe_kolom NOT NULL)
MODIFY (nama_kolom tipe_kolom CONSTRAINT nama_constraint 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.
--

Deklarasi saat CREATE TABEL adalah :


Nama_kolom tipe_kolom UNIQUE
Nama_kolom tipe_kolom CONSTRAINT nama_constraint UNIQUE
CONSTRAINT nama_constraint UNIQUE (nama_kolom)

-Deklarasi saat ALTER TABEL adalah :


ADD CONSTRAINT nama_constraint UNIQUE (nama_kolom)

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

nama Constraintnya : FK_NamaTabelChild_NamaTabelParent

Deklarasi saat CREATE TABEL adalah :


CONSTRAINT nama_constraint FOREIGN KEY (nama_kolom_n) REFERENCES
nama_tabel_parent [ON DELETE CASCADE]

Deklarasi saat ALTER TABEL adalah :


ADD CONSTRAINT nama_constraint FOREIGN KEY
(nama_kolom_n)REFERENCES nama_tabel_parent [ON_DELETE_CASCADE]

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)

-Deklarasi saat ALTER TABEL adalah :


ADD 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.

Deklarasi saat CREATE TABEL adalah :


Nama_kolom tipe_data DEFAULT nilai_default

Deklarasi saat ALTER TABEL adalah :


MODIFY nama_kolom tipe_data DEFAULT nilai _default

2.7 Kamus Data Constraint


Semua CONSTRAINT yang dideklarasikan dapat dilihat melalui suatu kamus data bernama
USER_CONSTRAINT.
Perintah untuk melihat :
SELECT * FROM USER_CONSTRAINT;

Kamus data USER_CONSTRAINT mempunyai kolom-kolom, antara lain :


No

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

Nama User pemilik tabel


Nama Constraint
Tipe Constraint:
C : Check (Check dan Not Null)
P : Primary (Primary Key)
R : Reference (Foreign Key)
U : Unique
Nama tabel tempat Constraint berlaku
Syarat yang diberikan, khusus untuk CHECK
Tabel Referensi, khusus untuk Foreign Key
Constraint yang menjadi acuan untuk tabel
referensi, khusus untuk Foreign Key
Aturan yang berlaku saat parent yang telah
mempunyai child, akan dihapus
NO ACTION : paren tidak boleh dihapus
CASCADE : child akan ikut terhapus
Status Constraint, ENABLED : aktif ;
DISABLED : tidak aktif

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;

Kamus data USER_CONS_COLUMNS mempunyai kolom-kolom sebagai berikut:


No

Nama Kolom

Keterangan

1
2
3
4

Owner
Constraint_Name
Tabel_Name
Column_Name

Nama User pemilik tabel


Nama Constraint
Nama tabel tempat Constraint berlaku
Nama kolom tempat Constraint berlaku

Position

Posisi kolom dalam Constraint, jika Constraint tersusun


dari beberapa kolom (pada Primary Key dan Foreign
Key)

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

:isi sesuai perintah asisten

Password

:isi sesusai perintah asisten

Host String

:isi sesuai perintah asisten

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 dieksekusi ulang


-RUN;

-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.

3.2 Membuat tabel


Pada umumnya semua tabel memiliki Constraint PRIMARY KEY, karena digunakan untuk
memastikan tidak ada Redudansi data
Ketik perintah SQL berikut untuk membuat tabel trayek, lalu tekan Enter
-create

table

primary key,

trayek(kd_trayek

varchar2(6)

constraint

pk_trayek

tujuan varchar2(30),tarif integer);--

Untuk melihat apakah kita berhasil membuat tabel trayek, ketik perintah berikut
-SELECT * FROM tab;

-Lalu dilihat apakah ada tabel bernama trayek


Untuk melihat struktur tabel yang telah kita buat, ketikan perintah berikut

DESCRIBE trayek;

atau

DESC trayek;

-- TABEL JADWAL -create

table

jadwal(kd_jadwal

varchar2(6)

constraint

pk_jadwal primary key,


hari varchar2(10),jam varchar2(10));

-- TABEL SUPIR -create


primary

table

supir(kd_supir

key,nama

varchar2(6)

varchar2(20),alamat

constraint

pk_supir

varchar2(30),telepon

varchar2(15));

--TABEL MOBIL -create

table

mobil(plat_no

varchar2(6)

constraint

pk_mobil

primary key,
jenis varchar2(15),tahun varchar2(5),kapasitas integer);

3.3 Membuat tabel dengan Constraint FOREIGN KEY


Membuat tabel pesan
-- TABEL OPERASIONAL -create table operasional
(
kd_operasi varchar2(6) constraint pk_operasional primary key,
tgl_berangkat date,kode_trayek varchar2(6),
kode_jadwal varchar2(6),
kode_supir varchar2(6),kode_mobil varchar2(6),
constraint
fk_trayek
trayek (kd_trayek),

foreign

key(kode_trayek)

references

constraint
fk_jadwal
jadwal (kd_jadwal),

foreign

key(kode_jadwal)

references

constraint fk_supir foreign key(kode_supir) references supir


(kd_supir),
constraint fk_mobil foreign key(kode_mobil) references mobil
(plat_no));

-- TABEL PESAN -create table pesan


(
no_fak varchar2(6) constraint pk_pesan primary key,
kode_operasi varchar2(6), tgl_fak date,
nama_pemesan varchar2(30),
alamat_pemesan varchar2(30),
constraint fk_operasional foreign key(kode_operasi) references
operasional (kd_operasi));

3.4 Modifikasi table


Kita akan mencoba perintah modifikasi, dengan mengubah struktur tabel supir, yaitu untuk
kolom telepon diubah tipe datanya menjadi varchar2 dengan ukuran data 15.

ALTER TABLE supir MODIFY telepon varchar2(15);

Lakukan pengecekan apakah sudah terubah tipe datanya, dengan perintah

DESC supir;

3.5 Mengisi table dengan data


Mengisi tabel trayek
insert into trayek values('TR001','SURABAYA',70000);

Mengisi tabel jadwal


insert into jadwal values('JD001','SENIN','08.00');

Mengisi tabel supir


-insert

into

supir

values('SP001','ABIMANYU','JL.KALIURANG

KM

15','0274-88888');
insert into supir values('SP002','AFIF','JL.DIPONEGORO',
'0274-44444');

-Untuk mengetahui pengaruh Constraint PRIMARY KEY ketikan perintah berikut :


-insert into supir
values('SP002','FULAN','Muntilan','0293-44444');

-Perintah INSERT yang ketiga gagal dieksekusi karena kolom kd_supir terdefinisi sebagai NOT
NULL dan UNIQUE yang diberikan constraint PRIMARY KEY.

Untuk mengetahui pengaruh Constraint FOREIGN KEY ketikan perintah berikut

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.

INSERT INTO trayek VALUES(15000,'MAGELANG', 'TR001');

Kenapa error..?

3.6 Manipulasi data dan perintah COMMIT serta ROLLBACK


Melihat semua isi tabel supir
SELECT * FROM supir;

Implementasi perintah UPDATE, amati persyaratannya

UPDATE supir SET telepon=0274-491547 WHERE kd_supir=SP001;


COMMIT;
SELECT * FROM supir;

Implementasi perintah DELETE


DELETE supir WHERE kd_supir=SP001;
SELECT * FROM supir;

Beri perintah ROLLBACK dan lihat perubahan datanya


ROOLBACK;
SELECT * FROM JUAL;

3.7 Penerapan Constraint Check


Pembuatan CHECK saat membuat table
create table mobil(plat_no varchar2(6) constraint pk_mobil primary
key,jenis

varchar2(15),tahun

varchar2(5),kapasitas

integer

check

(kapasitas > 9));

Pembuatan CHECK melalui ALTER TABLE


ALTER TABLE mobil ADD CONSTRAINT ck_kapasitas CHECK (kapasitas>9);

Uji dengan data seperti ini


INSERT INTO mobil VALUES('AB3215','L-300','2005',8);

Menon-aktifkan Constraint
ALTER TABLE mobil DISABLE CONSTRAINT ck_kapasitas;

Uji dengan memasukkan data berikut:


INSERT INTO mobil VALUES('AB3215','L-300','2005',8);

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

-select nama_tabel1.nama_kolom[,] from nama_tabel1[,]


nama_tabel1.nama_kolom=nama_tabel2.nama_kolom[and|or];

where

-Nama Alias Tabel


Dengan menggunakan Join, maka programmer bisa menghubungkan beberapa tabel dalam
jumlah yang banyak. Dalam menghubungkan antar tabel dia harus menyebutkan nama setiap
tabel pada syarat relasinya. Hal ini akan banyak menyita waktu dan tenaga. Oleh karena itu,
oracle menyediakan kemampuan untuk membuat alias pada suatu tabel. Alias merupakan
karakter/kata yang digunakan untuk menyingkat nama tabel sehingga memudahkan pekerjaan
programmer.
Berikut ini sintaks penulisan alias :
select alias1.nama_kolom,alias2.nama_kolom[,]

from nama_tabel1 alias1,nama_tabel2 alias2[,]


where alias1.nama_kolom=alias2.nama_kolom[and|or];

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

-Operator Berorientasi Himpunan


Hasil query pada setiap tabel akan dianggap sebagai himpunan. Oleh karena itu, operasi
himpunan pun bisa diberikan pada query SQL. Dengan menggunakan operasi himpunan kita bisa
menggabungkan dua buah query yang menghasilkan sebuah query. Query gabungan ini
kemudian sering dikenal dengan compound query.
Ada 3 operator berorientasi himpunan, yaitu :
UNION
INTERSECT
MINUS

:digunakan untuk menggabungkan hasil dari dua buah query


seperti operasi disjungsi pada himpunan.
:digunakan untuk memilih kelompok data hasil suatu query yang
juga merupakan hasil dari query yang lain. Intersect seperti
operasi konjungsi pada himpunan.
:digunakan untuk memilih hasil suatu query yang bukan termasuk
anggota query yang lain.

Sintaks umum penulisan compound query :


-select nama_kolom_n[,] from nama_tabel_x union | intersect | minus
select nama_kolom_n[,] from nama_tabel_y;

-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;

Sedangkan untuk menghapus suatu index bisa digunakan sintaks berikut :


drop index nama_index;

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;

Kamus data USER_INDEXES mempunyai kolom kolom antara lain :


No
1
2
3
4

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;

Kamus data USER_IND_COLUMNS mempunyai kolom kolom antara lain:


No
1
2
3
4

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

Kamus Data View


View hanya memiliki satu kamus data, yaitu USER_VIEW. Untuk melihat kamus data
USER_VIEW gunakan statement berikut ini :
select * from USER_VIEW;

Kamus data USER_VIEW mempunyai kolom kolom antara lain :


No
1.
2.

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

1. Lihat isi tabel pesan


select * from pesan;

2. Lihat isi tabel operasional

select * from operasional;

3. Gabungkan kedua tabel dengan mengimplementasikan join dengan query :


select pesan.no_fak,pesan.nama_pemesan,pesan.kode_operasi,
operasional.tgl_berangkat from operasional,pesan
where operasional.kd_operasi=pesan.kode_operasi;

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.

Nama Alias Tabel


Untuk mengimplementasikan nama alias ketik statement berikut dan bandingkan dengan
statement join diatas

-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');

Kemudian ketikkan statement berikut :


-select pesan.no_fak,pesan.nama_pemesan,operasional.kd_operasi,

operasional.tgl_berangkat from operasional,pesan


where operasional.kd_operasi=pesan.kode_operasi(+);

-Amati dan bandingkan dengan query berikut :


-select pesan.no_fak,pesan.nama_pemesan,operasional.kd_operasi,
operasional.tgl_berangkat from operasional,pesan
where operasional.kd_operasi=pesan.kode_operasi;

--

Operator Berorientasi Himpunan


Amati Implementasi perintah union pada statement berikut ini :
select hari from jadwal union select nama_pemesan from pesan;

Amati implementasi perintah intersect pada statement berikut ini :


select kd_operasi from operasional where kd_operasi='OP001' intersect
select kode_operasi from pesan;

Amati implementasi perintah Minus pada statement berikut ini :


select kd_operasi from operasional minus
select kode_operasi from pesan where kode_operasi='OP001';

Menggunakan Subquery
Amati implementasi perintah yang menggunakan subquery setelah klause where berikut ini :
--

Select plat_no,jenis from mobil where plat_no in(select plat_no from


operasional where tgl_berangkat='22-aug-2014');

-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';

-Untuk mengakses view yang dibuat diatas, ketikkan perintah berikut :


select * from vw_keberangkatan;

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.

Mengenal fungsi-fungsi bawaan Oracle

b.

Mampu menggunakan fungsi-fungsi : statistik, matematis, string, dan tanggal

c.

Mampu menggunakan fungsi untuk konversi data

d.

Memahami konsep dan penerapan sequence

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.

2.1 Fungsi Statistis


Fungsi-fungsi yang tersedia, berdasar tipe data parameter yang dapat dioperasikan, antara
lain :

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)

Varians tanpa mengikutkan nilai null

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;

-2.2 Fungsi Matematis


No
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

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 (/)

2.3 Fungsi String

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

Fungsi CONCAT dapat ditulis dengan menggunakan operator ||

Fungsi-fungsi dengan keluaran berupa data bilangan, antara lain :


No
1
2

Nama Fungsi
ASCII(str)
LENTGH(str)

Keterangan
Nilai ASCII dari str, hanya diambil dari karakter pertama
Cacah karakter dalam str

2.4 Fungsi Tanggal dan Waktu


No

Nama Fungsi

Keterangan

ADD_MONTHS (date,num)

Menambahkan bulan ke date sebanyak num

Tanggal terakhir sebelum bulan date


Selisih bulan antara date1 dengan date2

LAST_DAY(date)
MONTHS_BETWEEN(date1,date
2)

NEXT_DAY(date,str)

SYSDATE

Hari str berikutnya setelah date. Jika str berupa


bilangan, maka : 1: Minggu, 2:Senin, ,7 : Sabtu
Tanggal dan jam sekarang

2.5 Fungsi Konversi


No

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

Spesifikasi format pengubahan tipe data date ke str atau sebaliknya :

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

SQL Statement untuk memodifikasi sequence :


ALTER SEQUENCE nama_sequence
START WITH n
INCREMENT BY n
MINVALUE n
MAXVALUE n
CYCLE
CACHE n

SEQUENCE juga mempunyai kamus data, yaitu USER_SEQUENCES


SELECT * FROM USER_SEQUENCES;

Kamus data USER_SEQUENCES mempunyai kolom-kolom antara lain :

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

Perintah untuk menghapus sequence :


DROP SEQUENCE nama_sequence

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;

3.2 Fungsi Statistis


Mencari nilai statistis dari kolom TARIF pada tabel TRAYEK
SELECT COUNT(*), MAX(tarif), MIN(tarif), AVG(tarif),
STDDEV(tarif), VARIANCE(tarif)
FROM trayek;

3.3 Fungsi Matematis


ROUND dan TRUNC
SELECT ROUND(145.7329,3), TRUNC(231.365,2)
FROM dual;

CEIL dan FLOOR


SELECT CEIL(14.36), FLOOR(32.33)
FROM dual;

POWER
SELECT POWER(3,2)"3^2", POWER(4,2)"4^2", POWER(5,2)"5^2"
FROM dual;

MOD dan ABS


SELECT MOD(19,3), MOD(23,4), ABS(-7.2)
FROM dual;

SIN, COS, TAN, ASIN, ACOS, dan ATAN


SELECT SIN(30*3.14159265/180) sin30,
COS(30*3.14159265/180) cos30,
TAN(30*3.14159265/180) tan30,
ASIN(0.5), ACOS(1), ATAN(1/3)
FROM dual;

Penjelasan sintak di atas :


COS(30*3.14159265/180) artinya menghasilkan nilai cos dari sudut 30 dalam dalam

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;

SELECT CONCAT(nama, CONCAT(' : ',alamat)) nama


FROM supir;

SUBSTR dan LENGTH


SELECT jenis, SUBSTR(jenis,3,5) SUBSTRING , LENGTH(jenis) LENGTH
FROM mobil;

RTRIM dan LTRIM


SELECT alamat, RTRIM(alamat,'O') RTRIM, LTRIM(alamat,'JL.') LTRIM
FROM supir;

REPLACE
SELECT alamat, REPLACE(alamat,'O','OE') REPLACE
FROM supir;

3.5 Fungsi Tanggal


SELECT SYSDATE FROM dual;

Merubah format tampilan nilai DATE


ALTER SESSION SET NLS_DATE_FORMAT='dd-mm-yyyy hh24:mi:ss';

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;

-SELECT LAST_DAY(SYSDATE) FROM dual;

-SELECT ADD_MONTHS(SYSDATE,2) FROM dual;

-SELECT MONTHS_BETWEEN(SYSDATE+30,SYSDATE) FROM dual;

3.6 Fungsi Konversi


KONVERSI TIPE DATA
Merubah format tanggal :
SELECT TO_CHAR(tgl_fak,'dd-mon-yy') FROM pesan;

KONVERSI NILAI DATA


Coba masukkan data sebagai berikut :
INSERT INTO pesan
VALUES('FK011','OP005','22-aug 2014','BENO',null);

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 melihat apakah SQ_PESAN sudah terbuat, ketikkan perintah berikut :

SELECT * FROM USER_SEQUENCES;

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');

-INSERT INTO mobil


VALUES('FK0'||SQ_PESAN.NEXTVAL, 'OP002','22-AUG2014','JONI','jl.papua');

Lihat data pada tabel PESAN :

SELECT * FROM pesan;

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

Berdasarkan ketiga tabel tersebut,

ketikkan sintaks SQL-nya untuk mencari jumlah

pendapatan yang masuk dari pemesan yang tujuan perjalanannya ke SURABAYA (gunakan
perintah JOIN yang telah dipelajari pada unit-unit sebelumnya )

Anda mungkin juga menyukai