Instalasi Oracle XE
c. Saat muncul tampilan windows install wizard seperti dibawah ini klik tombol next.
d. Kemudian akan muncul window mengenai perjanjian lisensi. Klik pilihan accept the
agreement dan kemudian klik tombol next.
4
e. Setelah itu klik next untuk langkah selanjutnya sehingga muncul tampilan pemilihan
direktori tujuan instalasi seperti di bawah ini. Klik tombol next untuk melanjutkan.
g. Kemudian akan muncul tampilan dibawah ini (konfirmasi settingan instalasi Oracle XE),
5
kemudian klik install untuk melanjutkan proses instalasi.
h. Kemudian akan muncul tampilan seperti di bawah ini. Tunggu berapa saat sampai proses selesai.
j. Kemudian akan muncul tampilan browser dan silahkan mencobanya dengan memasukkan:
Username : system
Password : 1234 (sesuai dengan password yang dimasukkan pada proses instalasi)
Atau dapat juga dengan Menuliskan Alamat http://127.0.0.1:8080/apex/f?p=4950 pada url
browser kalian
6
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
menghubungkanuser 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 Oracleversi 10 keatas (Oracle 10g atau
Oracle XE), yang membedakannya adalah i-SQL*Plus berbasis browser.
a. Untuk dapat membuka SQL*Plus (tampilan command line) langkahnya adalah
sebagai berikut: klik Start -7 Program -7 Oracle Database 10g Express Edition
-7 Run SQL Command Line. Atau juga dapat melalui, Start -7 Run -7
Open : sqlplus -7 OK, window SQL*Plus command line akan tampil. Setelah window
SQL*Plus command line terbuka, akan ada username dan password. Untuk itu,
Anda harus memasukkanusername dan password. Ada user yang dibuat secara
default ketika proses instalasi, yang terpenting adalah user sys dan system
dengan password sesuai dengan password yang dimasukkan pada saat instalasi.
Kedua user inilah yang paling vital karena mempunyai hak-hak tertinggi (privileges)
dalam mengatur database. Untuk alas an keamanan, maka password untuk kedua
user ini harus segera diganti setelah proses instalasi.
Cara untuk masuk ke database, yaitu dengan perintah CONN, contohnya:
SQL> CONN
7
Enter user-name: [username]
Enter password: [*********]
atau
SQL> CONN [username]/[password]
b. Sedangkan untuk dapat membuka i-SQL*Plus (tampilan browser) adalah : klik Start-
7 Program -7 Oracle Database 10g Express Edition -7 Go to Database Homepage-
7 Login (dengan mengisikan username dan password) -7 SQL -7 SQL Command -
7 Enter Command
Perintah:
SQL> PASSW system
Pada i-SQL*Plus langsung saja ketikkan
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];
Disarankan, jangan menggunakan user sys atau system untuk membangun aplikasi database.
8
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 toserba dengan
password toserba. 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.
9
• 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 untuk 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:
CREATE ROLE [nama_role] IDENTIFIED BY [password_role];
Jika Anda perhatikan cara pembuatan role mirip dengan cara pembuatan user. Nilai setelah
klausa IDENTIFIED BY merupakan password dari role tersebut nantinya akan digunakan jika
role ini akan digunakan. Karena sifat ini, role juga disebut virtual user.
Setelah membuat role, Anda harus mendefinisikan privilege apa saja yang dimiliki role.
Pemberian privilege ke role mirip dengan pemberian privilege ke user.
--
GRANT [privilege] TO [nama_role];
--
10
Anda dapat memberikan role ini kepada user. Seperti contoh berikut ini:
--
GRANT [nama_role] TO [nama_user];
--
Contoh:
--
GRANT role_toserba TO toserba;
--
Saat ini user toserba memiliki satu role yaitu role_toserba yang di dalamnya terdapat 3
privilege. Untuk mengambil/menghapus hak akses itu dari user, gunakan perintah REVOKE
seperti contoh berikut:
--
REVOKE [nama_role] FROM [nama_user];
--
Contoh:
--
REVOKE role_toserba FROM toserba;
LATIHAN
1. Buka SQL*Plus atau SQL Command Line , Kemudian ketikkan perintah berikut ini :
SQL> CONN
Enter user-name: System
Enter password: 1234
atau
SQL> CONN System/1234
Apa yang terjadi setelah anda memasukkan perintah tersebut ?
11
SQL> CONN
Enter user-name: System
Enter password: 1
Menurut anda apa fungsi dari perintah PASSW system ?
12
a) SQL> CREATE ROLE role_pembelian IDENTIFIED BY 1234;
Menurut anda apa fungsi dari perintah Create role?
KESIMPULAN :
13
DATA DEFINITION LANGUAGE
Membuat Tabel
CREATE TABLE nama_tabel (nama_kolom tipe_kolom[size]);
Contoh:
create table kategori (id_kategori number, nama_kategori varchar2(25));
Keterangan :
create table Perintah (query) untuk membuat table
kategori Nama table yang akan dibuat id_kategori
& nama_kategori Nama kolom dalam table yang akan dibuat
number & varchar2 Tipe kolom
(25) Ukuran, mendefinisikan banyaknya karakter/variable yang
dapat ditampung dalam kolom tersebut
Membuat Tabel
Menghapus Tabel
DROP TABLE nama_tabel;
14
pesan kesalahan.
Konvensi nama constraint-nya adalah : NN_NamaTabel_NamaKolom
Deklarasi saat CREATE TABLE adalah:
--
CREATE TABLE nama_tabel (nama_kolom tipe_kolom NOT NULL);
atau
CREATE TABLE nama_tabel (nama_kolom tipe_kolom CONSTRAINT
nama_costraint NOT NULL);
--
Deklarasi saat ALTER TABLE adalah:
--
ALTER TABLE nama_tabel MODIFY (nama_kolom tipe_kolom NOT NULL);
atau
ALTER TABLE nama_tabel MODIFY (nama_kolom tipe_kolom
CONSTRAINT
nama_constraint NOT NULL);
--
b. Unique
Constraint Unique adalah sebuah batasan yang diberikan kepada suatu kolom dalam tabel
tertentu dimana data – data yang diberikan tidak boleh sama antara baris yang satu dengan baris yang
lainnya, tetapi masih boleh kosong dalam artian tidak diberikan data.
Unique menjaga agar data pada suatu tabel tidak terulang lagi pada baris yang lain.
Pesan error akan dimunculkan oleh Oracle jika Anda memasukkan data yang sama. Konvensi
nama constraint-nya adalah : UK_NamaTabel_NamaKolom
Deklarasi saat CREATE TABLE adalah:
CREATE TABLE nama_tabel (nama_kolom tipe_kolom UNIQUE);
atau
CREATE TABLE nama_tabel (nama_kolom tipe_kolom CONSTRAINT
nama_constraint UNIQUE);
15
diberikan tidak boleh kosong dan tidak boleh sama dengan baris yang lain. Misalnya pada
tabel mahasiswa, kolom no_mahasiswa diberikan constraint Primary Key, karena setiap
mahasiswa pasti memiliki no_mahasiswa, sehingga tidak kosong (Not Null) dan juga tidak
mungkin satu orang mahasiswa mempunyai no_mahasiswa yang sama dengan mahasiswa
yang lain (Unique). Hanya saja perbedaannya adalah cobstraint PRIMARY KEY
membentuk index untuk kolom tersebut.
Konvensi nama Constraint-nya adalah : PK_NamaTabel
Deklarasi Primary Key pada satu kolom saat CREATE TABLE adalah:
CREATE TABLE nama_tabel (nama_kolom tipe_kolom PRIMARY KEY);
atau
CREATE TABLE nama table(nama kolom tipe kolom CONSTRAINT nama_constraint
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. Tetapi
kombinasi data untuk semua kolom PRIMARY KEY akan unik untuk masing-masing baris.
Deklarasi PRIMARY KEY pada beberapa kolom saat ALTER TABLE adalah:
--
ALTER TABLE nama_tabel ADD CONSTRAINT nama_constraint PRIMARY KEY
(nama_kolom);
--
Deklarasi PRIMARY KEY pada beberapa kolom saat ALTER TABLE adalah:
--
ALTER TABLE nama_tabel ADD CONSTRAINT nama_constraint PRIMARY KEY
(nama_kolom,...,nama_kolom_n);
--
Catatan : Hanya terdapat satu PRIMARY KEY untuk satu tabel, baik terbentuk dari
satu kolom atau beberapa kolom.
d. Foreign Key
Istilah lain yang banyak dipakai dalam membuat relasi antara tabel yang satu dengan tabel
yang lainnya adalah Foreign Key. Foreign Key adalah kolom dalam sebuah table yang
bukan primary key, tetapi kolom tersebut merupakan primary key dalam table yang lain.
Foreign key digunakan untuk menjaga integritas data antara tabel parent dengan table
child.
16
Deklarasi saat CREATE TABLE adalah :
--
CREATE TABLE nama_tabel (nama_kolom tipe_data,..., nama_kolom_n
tipe_data,CONSTRAINT nama_constraint FOREIGN KEY (nama_kolom)
REFERENCES nama_tabel_parent [ON DELETE CASCADE]);
--
Deklarasi saat ALTER TABLE adalah :
--
ALTER TABLE nama_tabel 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.
e. Check
Sesuai namanya, constraint CHECK digunakan untuk memberikan sebuah kondisi kepada
constraint yang berguna untuk menguji apakah data sesuai dengan syarat yang harus
dipenuhi. Data akan ditolak jika tidak sesuai dnegan syarat yang telah diberikan pada
constraint Check. Sebagai contoh, kita akan menambahkan constraint Check pada kolom
nilai supaya setiap nilai yang diberikan harus lebih besar dari 0 (nol).Seperti syarat yang
telah diberikan pada kolom nilai, data yang boleh dimasukkan ke dalam kolom tersebut harus
lebih besar daripada nol.
Contoh syarat pengujian yang lain dapat berupa :
1) Daftar nilai, misal pada tabel mahasiswa, pada kolom jenis_kelamin hanya bisa menerima
nilai („L‟, „P‟)
2) Rentang nilai, misalnya pada kolom usia hanya bisa menerima nilai antara 15 sampai
30.
Konvensi nama Constraintnya adalah : CK_NamaTabel_NamaKolom
Deklarasi saat CREATE TABLE adalah :
--
CREATE TABLE nama_tabel (nama_kolom tipe_kolom CHECK (syarat));
Atau
17
CREATE TABLE nama_tabel (nama_kolom tipe_kolom CONSTRAINT nama_constraint
CHECK (syarat));
--
f. Default
Default sebenarnya tidak termasuk kategori Constraint, karena tidak membatasi data yang
masuk ke dalam tabel. Dengan DEFAULT, nilai suatu kolom akan diberikan jika
penambahan data tidak secara eksplisit menyebutkan nilai untuk kolom tersebut.
Pemberian nilai NULL akan mencegah pemberian nilai DEFAULT yang ditetapkan.
LATIHAN
18
Kode_suplier sebagai primary key
4. Buat sebuah tabel dengan nama SUPLIER di dalam user pembelian
Kode_pasok sebagai primary key, kode_bara]ng dan kode_suplier sebagai foreign key
8. Buat sebuah tabel dengan nama PEMBELIAN di dalam user pembelian
Kode_pembelian sebagai primary key, kode_barang dan kode_customer sebagai foreign key
9. Hapuslah table barang dengan perintah berikut
SQL> drop table barang;
Mengapa table barang tidak bisa di hapus ?
10. Sekarang coba anda hapus table pasok . perhatikan apa yang terjadi ?
KESIMPULAN :
19
DATA MANIPULATION LANGUAGE (DML)
Data Manipulation Language (DML) merupakan bahasa basis data yang berguna untuk
melakukan modifikasi dan pengambilan data pada suatu basis data.
UPDATE Mahasiswa
20
D. Pemilihan data dari satu atau beberapa tabel :
Syntax :
SELECT [DISTINCT] select_list
FROM table_source
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_expression [ASC | DESC] ]
Contoh :
SELECT * FROM Mahasiswa WHERE Nama LIKE "%rey" ORDER BY Nama DESC;
LATIHAN
1. Setelah tanda ‘SQL> ‘ anda tuliskan sintak berikut ini secara berurutan
INSERT INTO barang (kode_barang,nama_barang,satuan_barang,stok_barang)
VALUES (‘B001’,’Lemari Es’,’unit’,11);
Select * from barang;
Apa yang terjadi ?
2. Tambahkan sebuah record lagi pada table barang sehingga isi dari table sebagai berikut :
3. Tambahkan sebuah record lagi sehingga isi dari table sebagai berikut :
21
4. Tambahkan sebuah record lagi pada table barang sehingga isi dari table sebagai berikut :
5. Tambahkan 3 buah record pada table suplier sehingga isi dari table sebagai berikut :
6. Tambahkan 3 buah record pada table customer sehingga isi dari table sebagai berikut :
7. Pada table barang yaitu pada field satuan barang dan field stok barang untuk kode_barang
=’B003’ terlihat kosong. Isikan pada field satuan_barang dengan ‘UNIT’ dan stok_barang
dengan 30.
8. Tambahkan sebuah record pada table pasok pada field kode_pasok =’P001’,
kode_barang=’B010’, kode_suplier=’s001’, dan jumlah _pasok=5. Lihat apa yang terjadi ?
Apakah terjadi penambahan record pada table pasok ? Jika tidak , jelaskan mengapa ?
22
9. Tambahkan 3 buah record pada table pasok sehingga isi dari table sebagai berikut :
10. Tambahkan 3 buah record pada table pembelian sehingga isi dari table sebagai berikut :
KESIMPULAN :
23
PENGELOMPOKAN, PENGURUTAN, DAN KRITERIA DATA
Pada Kasus seleksi data, seringkali diminta untuk menampilkan atau memilih sekumpulan data
berdasarkan kelompok data terentu. Untuk menyelesaikan permasalahan tersebut SQL
menyedian perintah atau sintak group by. Pada pengelompokan data biasanya disertakan bersama
Aggregate Function.
Min
Perintah min digunakan untuk menampilkan nilai terkecil dari suatu kelompok tabel.
Sintak :
SELECT field1, … field-n, MIN(nama_field)
FROM nama_tabel
GROUP BY nama_field;
Max
Perintah max digunakan untuk menampilkan nilai terbesar dari suatu kolom pada tabel.
Sintak :
SELECT field1, … field-n, MAX(nama_field)
FROM nama_tabel
GROUP BY nama_field;
Avg
Perintah avg digunakan untuk menghitung rata-rata dari nilai suatu kolom pada tabel.
Sintak :
SELECT field1, … field-n, AVG(nama_field)
FROM nama_tabel
GROUP BY nama_field;
24
Sum
Perintah sum digunakan untuk menghitung jumlah nilai suatu kolom pada tabel.
Sintak :
SELECT field1, … field-n, SUM(nama_field)
FROM nama_tabel
GROUP BY nama_field;
Count
Perintah count digunakan untuk menghitung jumlah baris suatu kolom pada tabel.
Sintak :
SELECT field1, … field-n, COUNT(nama_field)
FROM nama_tabel
GROUP BY nama_field;
LATIHAN
1. Tampilkan minimum pemasokan per kode barang
Ketik perintah berikut ini
SQL> Select kode_barang as kd_brg, min (jumlah_pasok) as minimum_pasok
2 From pasok;
Apakah perintah tersebut dapat dieksekusi ? Menurut anda mengapa perintah tidak bisa di
proses ?
2. Ketik perintah berikut ini
SQL> Select kode_barang as kd_brg, min (jumlah_pasok) as minimum_pasok
2 From pasok
3 group by kode_barang;
Bagaimana hasil dari perintah diatas ? Jelaskan ?
3. Tampilkan minimum pembelian per customer .
4. Tampilkan maksimum pemasokan per kode suplier.
5. Tampilkan rata rata pemasokan (rata-rata jumlah pasok) per kode barang.
6. Tampilkan total pembelian per kode barang per customer.
7. Tampilkan berapa kali pemasokan(cacah pasok) tiap kode_barang. Atau dengan kata lain :
25
berdasarkan kode barang ada berapa kali pemasokan.
8. Tampilkan minimum , maksimum, rata-rata dan jumlah barang serta berapa kali terjadi
pembelian untuk tiap kode barang.
KESIMPULAN :
Sintak
SELECT field1,field2,…, field-n
FROM nama_tabel
ORDER BY nama_field;
LATIHAN
26
KESIMPULAN :
KRITERIA DATA
Kriteria dengan having
Klausa HAVING digunakan untuk menentukan kondisi bagi klausa GROUP BY.
Kelompok yang memenuhi HAVING saja yang akan dihasilkan.
Sintak :
SELECT field1,field2,…, field-n, aggregate_function
FROM nama_tabel
GROUP BY nama_field
HAVING kriteria_agregate_function;
FROM nama_tabel
FROM nama_tabel
27
Sintak kriteria where dengan in
SELECT field1,field2,…, field-n
FROM nama_tabel
FROM nama_tabel
LATIHAN
1. Tampilkan kode customer yang mempunyai cacah pembeliann =4;
2. Tampilkan kode barang yang jumlah pasoknya kurang dari atau sama dengan 5
3. Tampilkan kode barang dan kode suplier yang jumlah pasoknya antara 5 dan 12
4. Tampilkan customer pada table pembelian yang mempunyai kode ‘c001’ atau ‘c003’
5. Tampilkan data suplier yang nama suplier nya berawalan huruf ‘A’
KESIMPULAN :
28
QUERY, VIEW DAN ALJABAR RELASIONAL
FROM nama_tabel
WHERE kriteria
HAVING kriteria_aggregate_function
ORDER BY field ;
WHERE kriteria
HAVING kriteria_aggregate_function
ORDER BY field ;
UNION
Union merupakan operator yang digunakan untuk menggabungkan hasil query, dengan ketentuan
29
jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan datanya harus
sama.
Sintak SQL nya sebagai berikut
SELECT field1,field2,…, field-n, aggregate_function
FROM nama_tabel
[WHERE] [kriteria]
UNION
FROM nama_tabel
[WHERE] [kriteria]
INTERSECT
Intersect merupakan operator yang digunakan untuk memperoleh data dari dua buah query
dimana data yang ditampilkan adalah yang memenuhi kedua query tersebut dengan ketentuan
jumlah, nama dan tipe kolom dari masing-masing tabel yang akan ditampilkan datanya harus
sama.
FROM nama_tabel
[WHERE] [kriteria]
INTERSECT
FROM nama_tabel
[WHERE] [kriteria]
30
DIFFERENCE (MINUS)
Difference bertujuan untuk menampilkan data hasil pengurangan dari dua query atau sub query.
FROM nama_tabel
[WHERE] [kriteria]
DIFFERENCE | MINUS
FROM nama_tabel
[WHERE] [kriteria]
DISTINCT / PROYEKSI
Pada dasarnya distinct digunakan untuk menghilangkan nilai ganda.
Sintak SQL nya sebagai berikut
SELECT DISTINCT field1,field2,…, field-n, aggregate_function
FROM nama_tabel
[WHERE] [kriteria]
JOIN
Operasi Join, Join merupakan operasi yang digunakan untuk menggabungkan dua tabel
atau lebih dengan hasil berupa gabungan dari kolom-kolom yang berasal dari tabel-tabel
tersebut. Pada join sederhana, tabel-tabel digabungkan dan didasarkan pada pencocokan
antara kolom pada tabel yang berbeda.
Sintak SQL nya sebagai berikut
31
SELECT tabel1.field1,…, tabel1.field-n,
Tabel2.field1,…, tabel1.field-n,
Tabel3.field1,…, tabel1.field-n,
Tabel2.field_PK = table-n.field_PK
LATIHAN
1. Tampilkan berapa kali pembelian per kode barang per kode customer
2. Tampilkan nama barang, tanggal berapa barang itu dipasok dan berapa jumlah barang yang
dipasok
3. Tampilkan kode suplier, berapa kali pemasokan dan jumlah pasok . kode yang ditampilkan
adalah ‘s002’(gunakan operasi union)
4. Tampilkan kode barang dan kode suplier yang memiliki jumlah pasok lebih besar atau sama
dengan 4 (gunakan operasi intersection)
5. Tampilkan kode barang, banyaknya pemasokan dan jumlah pemasokan untuk kode barang
yang jumlah pemasokannya lebih kecil atau sama dengan 15.(gunakan operasi minus)
KESIMPULAN :
32
DATA CONTROL LANGUAGE (DCL)
COMMIT
Adalah perintah yang berfungsi untuk mengendalikan pengeksekusian transaksi yang
menyetujui rangkaian perintah yang berhubungan erat dengan perintah yang sebelumnya telah
berhasil dilakukan.
33
LATIHAN
1. Gunakan user / database pembelian yang telah dibuat pada latihan sebelumnya, kemudian
tambahkan sebuah table KARYAWAN
Column pada table karyawan :
KESIMPULAN
34
DASAR DASAR PL/SQL
PL/SQL (Procedural Language/Structure Query Language) adalah suatu blok yang berisi
skrip-skrip bahasa prosedural. PL/SQL merupakan bahasa pemrograman procedural. PL/SQL
dapat meningkatkan kinerja database
DECLARE
variabel tipe_data;
konstanta CONSTANT tipe_data := nilai;
...
BEGIN
statement_1;
statement_2;
...
EXCEPTION
WHEN nama_eksepsi THEN statement_untuk_mengatasi_error;
...
END;
BEGIN
DBMS_OUTPUT.PUT_LINE(‘Belajar Oracle’);
END;
Catatan:
Untuk melihat hasil, setting terlebih dahulu variabel sistem SERVEROUTPUT dengan
menuliskan :
SET SERVEROUTPUT ON
35
Contoh Lain
SET SERVEROUTPUT ON
DECLARE
teks VARCHAR2 (20);
BEGIN
teks := ‘Belajar Oracle’;
DBMS_OUTPUT.PUT_LINE(teks);
END;
/
Tipe Data
• Numerik
– NUMBER, BINARY_INTEGER, DEC, DOUBLE PRECISION, INTEGER, INT,
NUMERIC, REAL, SMALLINT
• Karakter
– VARCHAR2, CHAR, LONG
• DATE
• BOOLEAN
• ROWID
Variable
Adalah sebuah peubah yang digunakan untuk menampung sebuah nilai di memori komputer.
Contoh
DECLARE
X integer;
36
Alamat varchar2(40);
No_induk char(8);
.....
BEGIN
X := 12;
Alamat := ‘Gelatik Dalam 391, Bandung’;
No_induk := ‘DOG29549’;
END;
Konstanta
Digunakan untuk menyimpan sebuah nilai di memori komputer.Nilai yang disimpan bersifat
tetap (konstan).
Contoh :
DECLARE
Komentar
Jenis komentar :
Contoh :
SET SERVEROUTPUT ON
DECLARE
37
X Integer;
BEGIN
X := ‘Belajar Oracle’;
DBMS_OUTPUT.PUT_LINE( TO_CHAR(X) );
EXCEPTION
WHEN VALUE_ERROR THEN
DBMS_OUTPUT.PUT_LINE (‘Kesalahan pada pengisisan
nilai’);
END;
/
LATIHAN
1. Ketik perintah berikut ini :
SQL> BEGIN
SQL> DBMS_OUTPUT.PUT_LINE(‘Belajar Oracle’);
SQL> END;
SQL> /
Apa yang terjadi ?
2. Ketik perintah berikut ini :
SQL> declare
SQL> nama varchar2(30);
SQL> alamat varchar2(30)
SQL> BEGIN
SQL> select nama_customer,alamat_customer into nama,alamat
SQL> from customer where kode_customer=’c001’;
SQL> dbms_output.put_line(‘Data Customer dengan kode c001’);
SQL> dbms_output.put_line(‘Nama : ‘ || nama);
SQL> dbms_output.put_line(‘Alamat : ‘ || alamat);
38
SQL> end;
SQL> /
a. Apa yang terjadi ?
b. Menurut anda apa fungsi nama dan alamat ?
c. Mengapa untuk membuat blok SQL/PL tersebut harus dikoneksikan ke user pembelian ?
KESIMPULAN
Record merupakan struktur data komposit atau gabungan dari beberapa field, baik yang bertipe
sama maupun berbeda. Kita dapat menggunakan record untuk menyimpan variabel-variabel yang
berhubungan, Misalanya record Alamat dimana di dalamnya terdapat field NamaJalan, NoJalan,
NoRumah, Kota, kodePos dan lain-lain.
Untuk mendefinisikan suatu variabel yang bertipe Record, kita menggunakan Sebuah Keyword
yaitu RECORD
Syntax:
TYPE NamaRecord IS RECORD (
Field1 TipeData,
Field2 TipeData,
…
);
Contoh :
39
NamaJalan VARCHAR2(100),
NOJalan NUMBER,
NoRumah VARCHAR2(5),
Kota VARCHAR2(20)
);
);
LATIHAN
40
24 /
Syntax:
Contoh :
DECLARE
INDEX BY BINARY_INTEGER;
X array_ku;
LATIHAN
Ketik perintah berikut ini
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
2 TYPE LARIK IS TABLE OF NUMBER
41
3 INDEX BY BINARY_INTEGER ;
4 A LARIK ;
5 BEGIN
6 A(1) := 10; A(2) := 20;
7 A(3) := 30; A(4) := 40;
8 dbms_output.put_line(‘Nilai elemen larik ke 1 : ’|| to_char(a(1)));
9 dbms_output.put_line(‘Nilai elemen larik ke 2 : ’|| to_char(a(2)));
10 dbms_output.put_line(‘Nilai elemen larik ke 3 : ’|| to_char(a(3)));
11 dbms_output.put_line(‘Nilai elemen larik ke 4 : ’|| to_char(a(4)));
12 END;
13 /
Tuliskan hasil outputnya ? dan Berikan kesimpulan anda ?
KESIMPULAN :
Setiap pembahasan materi PL/SQL Oracle selalu tidak dapat dipisahkan dengan pembahasan
materi percabangan. Yang dimaksud dengan Percabangan adalah opsi atau pilihan yang
didasarkan atas satu atau beberapa kondisi tertentu. Sebuah atau beberapa statemen akan di
jalankan jika kondisi tersebut bernilai TRUE dan sebaliknya tidak akan dieksekusi jika kondisi
tersebut tidak terpenuhi.
Secara umum di dalam PL/SQL Oracle, struktur percabangan dibagi menjadi 3 struktur, yaitu :
A. Struktur percabangan dengan satu kondisi
B. Struktur percabangan dengan dua kondisi
C. Struktur percabangan dengan tiga kondisi
42
Bentuk Umum Penulisan
Struktur percabangan dengan satu kondisi
IF kondisi THEN
Statemen ;
END IF;
LATIHAN
1. Buatlah sebuah blok SQL/PL yang menentukan sebuah bilangan bulat apakah termasuk
kedalam bilangan genap atau ganjil
Ketik perintah berikut ini
SET SERVEROUTPUT ON
DECLARE
BIL INTEGER := 100;
BEGIN
IF MOD(BIL,2)=0 THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(BIL)|| ' adalah bilangan Genap');
END IF;
END;
/
Tuliskan hasil outputnya ? dan Berikan kesimpulan anda ?
43
2. Ubahlah blok SQL/PL pada soal no 1 dengan menggunakan percabangan dengan 2 kondisi.
Kondisi pertama menyatakan bilangan genap dan kondisi kedua menyatakan bilangan ganjil
3. Ubahlah blok SQL/PL pada soal no 1 dengan menggunakan percabangan dengan 3 kondisi.
Kondisi pertama menyatakan bilangan genap, kondisi kedua menyatakan bilangan ganjil dan
kondisi ketiga menyatakan bilangan negative.
KESIMPULAN :
While loop
WHILE kondisi LOOP
Statemen;
END LOOP;
For loop
44
FOR variable IN indeks_awal .. indeks_akhir LOOP
Statemen;
END LOOP;
LATIHAN
1. Buatlah sebuah blok SQL/PL yang menampilkan kalimat ‘Sukses dengan oracle’ sebanyak
10 kali
Ketik perintah berikut ini
SET SERVEROUTPUT ON
DECLARE
I integer;
BEGIN
I := 0;
LOOP
I:=I +1;
DBMS_OUTPUT.PUT_LINE(‘Sukes dengan Oracle’);
EXIT WHEN i=10;
END LOOP;
END;
/
Tuliskan hasil outputnya ? dan Berikan kesimpulan anda ?
2. Ubahlah blok SQL/PL pada soal no 2 dengan menggunakan pengulangan dalam bentuk while
loop
3. Ubahlah blok SQL/PL pada soal no 2 dengan menggunakan pengulangan dalam bentuk for
loop
KESIMPULAN :
45
PROSEDUR DAN FUNGSI
PROSEDUR
Sebenarnya prosedur pada PL/SQL hampir sama dengan prosedur bahasa pemrograman lainnya.
Prosedur memiliki header dan body. Header mengandung nama prosedur dan parameter atau
variabel yang digunakan oleh prosedur. Sedangkan body mengandung bagian deklarasi, bagian
eksekusi, dan bagian exception handling.
Sintaks umum untuk membuat prosedur
END;
Eksekusi Prosedur
Unutuk melakukan eksekusi terhadap suatu prosedur dari luar blok PL/SQL, kita harus
menggunkan statemen EXECUTE, atau cukup dituliskan dengan EXEC saja. Namun apabila
Anda ingin memanggil prosedur dari dalam blok PL/SQL, maka statemen EXECUTE tidak perlu
di tuliskan. Berikut ini bentuk umumnya.
FUNGSI
Function adalah jenis PL/SQL block yang menghasilkan satu nilai. Secara umum, function
digunakan melakukan perhitungan, mengecek eksistensi dan kevalidan suatu data. Function bisa
dilibatkan dalam expresi. Function bisa disimpan dalam database sebagai object schema,
sehingga suatu function bisa digunakan berulangkali tanpa harus melakukan parsing dan compile
ulang.
46
CREATE OR REPLACE FUNCTION nama_fungsi (parameter1 tipedata, parameter2
tipedata,…)
RETURN tipedata_fungsi
IS
Variable_variabel_lokal
BEGIN
Statemen;
…
RETURN nilai_fungsi;
END;
Ekesekusi Fungsi
Tidak seperti prosedur yang dalam eksekusinya membutuhkan perintah EXECUTE, pada fungsi
kita dapat langsung memasukkan nilainya ke dalam suatu variable yang sama tipedatanya
maupun melalui statemen SQL. Atau dapat juga melalui statemen SQL seperti yang ditunjukkan
oleh kode berikut .
PARAMETER
Dalam Oracele, parameter diklasifikasikan menjadi tiga jenis, yaitu parameter masukan, keluarn
dan masukan-keluaran.
1. Parameter Masukan
Parameter masukan adalah parameter yang berguna untuk menyimpan nilai yang
digunakn sebagai input di dalam badan prosedur maupun fungsi. Parameter ini ditandai
dengan mode IN.
2. Paramater Keluaran
Parameter keluaran adalah parameter yang menampung nilai hasil dari suatu proses yang
dilakukan dalam sub program.Pada kenyataannya parameter keluaran lebih sering di
temui di dalam prosedur dari pada didalam fungsi. Parameter ini ditandai dengan mode
OUT.
3. Parameter Masukan – Keluaran
47
Parameter ini merupakan parameter gabungan dari kedua jenis diatas. Parameter ini
berperan sebagai parameter masukan sekaligus parameter keluaran. Parameter ini
ditandai dengan mode IN OUT.
LATIHAN
1. Koneksikan database anda ke user pembelian kemudian buatlah sebuah prosedur yang dapat
menampilkan nama supplier dari table supplier yang memiliki kode ‘s001’.
Ketik perintah berikut ini :
create or replace procedure cari_nama_suplier
is vnamasuplier suplier.nama_suplier%TYPE;
begin
select nama_suplier into vnamasuplier from suplier where
kode_suplier=’s001’;
dbms_output.put_line(‘Namanya : ’|| vnamasuplier);
end;
/
a. Tuliskan hasil outputnya ?
b. Apakah nama suplier dengan kode ‘s001’ tampil di layar ?
c. Apa maksud dari suplier.nama_suplier%TYPE ?
Ketik perintah berikut ini :
SQL> Set serveroutput on
SQL> Execute cari_nama_suplier;
a. Apakah nama suplier dengan kode ‘s001’ tampil di layar ?
b. Tuliskan kesimpulan anda ?
2. Buatlah sebuah fungsi yang dapat menampilkan nama supplier dari table supplier yang
memiliki kode ‘s001’.
Ketik perintah berikut ini :
create or replace function cari_namasuplier
return suplier.nama_suplier%TYPE
is vnamasuplier suplier.nama_suplier%TYPE;
begin
select nama_suplier into vnamasuplier from suplier where
kode_suplier=’s001’;
48
return vnamasuplier;
end;
/
a. Tuliskan hasil outputnya ?
b. Apakah nama suplier dengan kode ‘s001’ tampil di layar ?
3. Ubahlah prosedur pada soal no 1 sehingga prosedur dapat menentukan nama suplier
berdasarkan kode suplier yang dimasukkan sebagai parameternya !
4. Ubahlah prosedur pada soal no 1 sehingga prosedur dapat mencari nama suplier dengan kode
suplier tertentu dimana nama suplier yang didapatkan tersebut disimpan ke dalam parameter
keluaran !
5. Ubahlah prosedur pada soal no 1 sehingga prosedur tersebut dapat mencari nama suplier
dengan kode tertentu menggunakan parameter masukan - keluaran !
KESIMPULAN :
49
TRIGGER
Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita
melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel.
Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat
membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering
ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel
sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam database akan
meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak
perlu lagi untuk melakukan validasi data.
MEMBUAT TRIGGER
Oracle telah menyediakan statement CREATE TRIGGER untuk membuat sebuah trigger
yang selanjutnya akan diaktivasi berdasarkan event tertentu. Secara umum, event trigger terbagi
menjadi dua, yaitu BEFORE (sebelum) dan AFTER (setelah). Event tersebut menandakan kapan
trigger akan diaktivasi, apakah sebelum ataukah sesudah proses yang dilakukan di dalam tabel
bersangkutan.
Daftar event yang mungkin digunakan untuk mengaktifkan trigger:
50
Untuk mencoba pembuatan trigger pada oracle persiapkan terlebih dahulu user atau database
sebagai berikut ini
User database: penjualan
Table I : Barang
Colom pada table barang
TabelII: Pasok
Column pada table pasok :
51
Tabel III : Pembelian
Column pada table pembelian :
LATIHAN
1. Ketikanlah perintah trigger berikut ini pada SQL command line anda
2. Setelah itu periksalah pengaruh trigger yang telah di buat dengan cara melakukan update
terhadap table barang, apa yang terjadi ?
3. Menurut anda apa hubungan antara perintah trigger pada soal no 1 dengan perintah
update pada soal no 2 ?
4. Ketiklah perintah trigger berikut ini
52
create or replace trigger tr_cekstokbarang
before insert on barang
for each row
begin
if(:new.stok_barang < 0)
then
:new.stok_barang := 0;
dbms_output.put_line('Stok barang diubah menjadi 0');
end if;
end;
/
5. Setelah itu periksalah pengaruh trigger pada soal no 3 dengan cara melakukan
penambahan data pada table barang namun stok_barang yang ditambahkan bernilai
negative (minus), apa yang terjadi ?
Set serveroutput on
Insert into barang values (‘B006’,’kursi’,’unit’,-5);
Select * from barang;
6. Menurut anda apa hubungan antara perintah trigger pada soal no 4 dengan perintah
menambah pada soal no 5 ?
Di dalam trigger dikenal istilah alias atau referensi, yaitu sejenis variabel yang menyimpan nilai
dari suatu kolom di dalam tabel. Alias tersebut terbagi menjadi dua yaitu :new dan :old. Alias
:new untuk menyimpan nilai terbaru sedangkan alias :old untuk menyimpan nilai lama.
MANAGING TRIGGER
Mengaktifkan atau menonaktifkan trigger
Syntax :
53
Mengaktifkan atau menonaktifkan semua trigger pada sebuah tabel
Syntax :
Menghapus trigger
Syntax :
LATIHAN :
1. Ketiklah perintah trigger berikut ini
2. Setelah itu periksalah pengaruh trigger pada soal no 1 dengan cara menambahkan data
pada table pasok , lalu lihat apa yang terjadi pada table pasok dan table barang ?
3. Jika dilihat dari perubahan data yang terjadi pada table barang, Menurut anda apa
hubungan antara perintah trigger pada soal no 1 dengan perintah menambah data pada
soal no 2 ?
KESIMPULAN :
54