Anda di halaman 1dari 35

Modul Praktikum

Semester Ganjil 2007-2008

Sistem Basis Data Lanjut

Wayan Firdaus Mahmudy


Program Diploma Tiga
Manajemen Informatika dan Teknik Komputer
Fakultas Matematika dan Ilmu Pengetahuan Alam
Universitas Brawijaya Malang

DAFTAR ISI

Bab 1. Data Definition Language (DDL) 1


Bab 2. Relationship 9
Bab 3. View 15
Bab 4. Transact-SQL 20
Bab 5. Procedure 26
Bab 6. Trigger 30
Bab
Data Definition Language (DDL)
1
Tujuan
1. Memahami pembuatan dan manipulasi dasar database.
2. Memahami pembuatan table database.
3. Membuat constraint sederhana.

1.1. Pembuatan Database


MS-SQL adalah database berbasis relasional, struktur data diatur
melalui pembuatan table-table yang saling berkaitan (mempunyai relasi).
Tiga elemen yang merupakan model fundamental dari relasi adalah:
Struktur Data (Table)
Terdiri dari baris (row atau record) dan setiap baris terdiri dari kolom-
kolom (column atau field) yang terdefinisi melalui tipe data pada kolom
tersebut.
Integritas Data
Isi data sesuai kondisi sebenarnya, misalkan field “tinggi_badan” tidak
boleh negative, “jenis_kelamin” hanya mempunya nilai ‘L’ dan ‘P’.
Kesesuaian data dengan nilai sebenarnya ini disebut juga “batasan nilai
untuk integritas data” atau “integrity constraints”.
Manipulasi Data
Data yang tersimpan dapat dimanipulasi dengan bahasa query seperti
SQL.

Praktikum Basis Data Lanjut – MITEK – September 2007 1


1.2. Data Definition Language (DDL)
DDL merupakan instruksi untuk membuat, mengubah dan
menghapus table. Ada tiga instruksi dasar DDL yaitu
 CREATE TABLE
 ALTER TABLE
 DROP TABLE

Latihan 1.1
Pada latihan ini anda akan belajar membuat dan memanipulasi database
Ikuti langkah-langkah berikut:
1. Dari “SQL Server Enterprise Manager” jalankan “Query
AnalyzerTools”
2. Buat database baru dengan perintah berikut

Database diciptakan dengan default 0.63 MK untuk data dan 0.49


untuk log.
3. Aktifkan database “akademik”.

Praktikum Basis Data Lanjut – MITEK – September 2007 2


4. Ketikkan sp_helpdb untuk melihat daftar seluruh database
name db_size owner dbid created status …
------------------------------------------------------------------------
akademik 1.12 MB XP\Administrator 7 Sep 23 2007 Status=ONLINE, ...
master 11.94 MB sa 1 Aug 6 2000 Status=ONLINE, ...
model 1.13 MB sa 3 Aug 6 2000 Status=ONLINE, ...
msdb 13.00 MB sa 4 Aug 6 2000 Status=ONLINE, ...
Northwind 3.63 MB sa 6 Aug 6 2000 Status=ONLINE, ...
pubs 2.00 MB sa 5 Aug 6 2000 Status=ONLINE, ...
tempdb 8.50 MB sa 2 Sep 23 2007 Status=ONLINE, ...

5. Ketikkan sp_helpdb akademik untuk melihat khusus database


“akademik”
name db_size owner dbid created status
------------------------------------------------------------
akademik 1.12 MB XP\Administrator 7 Sep 23 2007 Status=ONLINE,

name fileid filename


-----------------------------------------------------------
akademik 1 C:\Program Files\... \akademik.mdf …
akademik_log 2 C:\Program Files\... \akademik_log.LDF …

6. Ubah nama database dengan mengetikkan


EXEC sp_renamedb akademik, dbakademik
Akan muncul pesan kesalahan
Server: Msg 5030, Level 16, State 2, Line 1
The database could not be exclusively locked to
perform the operation.
Kesalahan terjadi karena database “akademik” masih aktif

8. Aktifkan database lain (misalnya “master”) dan ubah option database


“akademik” menjadi ‘single user’
USE master
EXEC sp_dboption akademik, 'single_user', 'TRUE'
Pastikan sebelum perintah di atas di eksekusi, pada “SQL Enterprise
Manajer” database “akademik” tidak aktif.
Ulangi menjalankan
EXEC sp_renamedb akademik, dbakademik

Praktikum Basis Data Lanjut – MITEK – September 2007 3


9. Hapus database dengan mengetikkan
DROP DATABASE dbakademik

Latihan 1.2
Pada latihan ini anda akan belajar membuat (CREATE) dan menghapus
(DROP) table serta menggunakan contraint PRIMARY KEY dan NOT
NULL.
Ikuti langkah-langkah berikut:
1. Jalankan script sebagai berikut
1 CREATE DATABASE dbPrak01
2
3 CREATE TABLE kota (
4 kode char(5) PRIMARY KEY,
5 nama char(30)
6 )

2. Aktifkan database dbPrak01 kemudian jalankan satu persatu query


berikut
1 INSERT kota(kode,nama) VALUES ('mlg','malang')
2 INSERT kota VALUES ('kdr','kediri')
3 INSERT kota VALUES ('kdr','kendari')
4 INSERT kota(kode) VALUES ('x')
5 INSERT kota VALUES ('y','')
6 INSERT kota VALUES ('z')

Query mana yang error, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 4


3. Drop table kota kemudian buat lagi dengan DDL berikut
1 DROP TABLE kota
2
3 CREATE TABLE kota (
4 kode char(5) PRIMARY KEY,
5 nama char(30) NOT NULL
6 )

4. Jalankan satu persatu query berikut


1 INSERT kota(kode) VALUES ('x')
2 INSERT kota(kode,nama) VALUES ('y','')

Query mana yang error, kenapa ?

Latihan 1.3
Pada latihan ini anda akan belajar momodifikasi (ALTER) dan
menggunakan contraint UNIQUE, CHECK dan DEFAULT.
Ikuti langkah-langkah berikut:

1. Drop table kota kemudian buat table propinsi dengan DDL berikut
1 CREATE TABLE propinsi (
2 kode_prop char(10) PRIMARY KEY,
3 nama_prop char(30) NOT NULL,
4 CONSTRAINT uq_nama_prop UNIQUE (nama_prop),
5 CONSTRAINT ck_nama_prop CHECK (nama_prop<>''),
6 )

2. Jalankan satu persatu query berikut


1 INSERT INTO propinsi VALUES ('jatim','jawa timur')
2 INSERT INTO propinsi VALUES ('jatim','jawa barat')

Praktikum Basis Data Lanjut – MITEK – September 2007 5


3 INSERT INTO propinsi VALUES ('jtm','jawa timur')
4
5 INSERT INTO propinsi VALUES ('jabar','')
6 INSERT INTO propinsi VALUES ('jabar','jawa barat')

Query mana yang error, kenapa ?

3. Anda bisa menambahkan field pada table propinsi sebagai berikut


1 ALTER TABLE propinsi
2 ADD jumlah_penduduk INT DEFAULT 0

4. Jalankan satu persatu query berikut


1 INSERT INTO propinsi(kode_prop,nama_prop) VALUES
2 ('jateng','jawa tengah')
3 INSERT INTO propinsi VALUES ('jak', 'dki jakarta',
4 -1)

5. Lakukan SELECT, anda akan mendapatkan isi table sebagai berikut


kode_prop nama_prop jumlah_penduduk
---------- ------------------------------ ---------------
jabar jawa barat NULL
jak dki jakarta -1
jateng jawa tengah 0
jatim jawa timur NULL

(4 row(s) affected)

Ada yang aneh ?

Praktikum Basis Data Lanjut – MITEK – September 2007 6


6. Update data yang aneh di atas sebagai berikut
1 UPDATE propinsi SET jumlah_penduduk=0
2 WHERE jumlah_penduduk<0
3
4 UPDATE propinsi SET jumlah_penduduk=0
5 WHERE jumlah_penduduk IS NULL

7. Anda bisa menambahkan constraint pada field jumlah_penduduk


sebagai berikut
1 ALTER TABLE propinsi
2 ADD CONSTRAINT ck_jumlah_penduduk
3 CHECK (jumlah_penduduk>=0)

8. Jalankan query berikut


1 INSERT INTO propinsi VALUES ('yog','yogyakarta',-1)

Perhatikan pesan yang muncul.


9. Jika tidak diperlukan anda bisa menghapus constraint sebagai berikut
1 ALTER TABLE propinsi
2 DROP ck_jumlah_penduduk

10. Jalankan ulang query pada langkah 8 untuk melihat apakah


constraint sudah terhapus.

Praktikum Basis Data Lanjut – MITEK – September 2007 7


TUGAS

Susun DDL untuk membuat table mahasiswa dengan spesifikasi sebagai


berikut
No Field Type Keterangan
1 Nim Char(10) Primary Key, panjang harus
tepat 10 karakter
2 Nama Varchar(20) Tidak boleh kosong
3 JK Char(1) Jenis Kelamin, hanya
mempunyai nilai L untuk laki-
laki dan P untuk perempuan
3 GolDarah Char(2) Golongan Darah: A, B, AB, O
4 Ipk Numeric Interval 0 sampai 4

Praktikum Basis Data Lanjut – MITEK – September 2007 8


Bab
Relationship
2
Tujuan
1. Membuat primary key yang dibentuk dari 2 field atau lebih.
2. Mengatur relationship antar table.

Latihan 2.1
Pada latihan ini anda akan belajar membuat primary key yang dibentuk
dari 2 field dan mengatur relationship antar table.
Ikuti langkah-langkah berikut:
1. Gunakan kembali hasil Latihan 1.3 atau jalankan kembali DDL
sebagai berikut
1 CREATE TABLE propinsi (
2 kode_prop char(10) PRIMARY KEY,
3 nama_prop char(30) NOT NULL,
4 jumlah_penduduk INT DEFAULT 0,
5
6 CONSTRAINT uq_nama_prop UNIQUE (nama_prop),
7 CONSTRAINT ck_nama_prop CHECK (nama_prop<>''),
8 CONSTRAINT ck_jumlah_penduduk
9 CHECK (jumlah_penduduk>=0)
10 )
11
12 CREATE TABLE kota (
13 kode_kota char(5),
14 kode_prop char(10) FOREIGN KEY
15 REFERENCES propinsi (kode_prop),
16 nama_kota char(30) NOT NULL,
17 PRIMARY KEY (kode_kota, kode_prop)
18 )

Praktikum Basis Data Lanjut – MITEK – September 2007 9


2. Dengan SQL Enterprise Manager anda bisa mendapatkan diagram
sebagai berikut

3. Isi table propinsi sebagai berikut


kode_prop nama_prop jumlah_penduduk
---------- ------------------------------ ---------------
jabar jawa barat 0
jak dki jakarta 0
jateng jawa tengah 0
jatim jawa timur 0
yog di yogyakarta 0

4. Jalankan satu persatu query berikut


1 INSERT kota VALUES ('ban','jatim','banyuwangi')
2 INSERT kota VALUES ('ban','yog','bantul')
3 INSERT kota VALUES ('ban','jatim','bangkalan')
4 INSERT kota VALUES ('leb','banten','lebak')

Praktikum Basis Data Lanjut – MITEK – September 2007 10


Query mana yang error, kenapa ?

5. Jalankan satu persatu query untuk menghapus record berikut


1 DELETE FROM propinsi WHERE kode_prop='jateng'
2 DELETE FROM propinsi WHERE kode_prop='jatim'

Query mana yang error, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 11


Latihan 2.2
Pada latihan ini anda akan belajar mengatur relationship antar table
menggunakan foreign key yang mereferensi ke primary key yang
dibentuk dari dua field.
Ikuti langkah-langkah berikut:
1. Tambahkan table penduduk dengan DDL sebagai berikut
1 CREATE TABLE penduduk (
2 nik char(5) PRIMARY KEY,
3 nama varchar(30) NOT NULL,
4 jk char(1),
5
6 kode_kota char(5) FOREIGN KEY
7 REFERENCES kota (kode_kota),
8 kode_prop char(10) FOREIGN KEY
9 REFERENCES propinsi (kode_prop),
10 )

Pesan kesalahan apa yang muncul, kenapa ?

2. Perbaiki DDL sebelumnya sebagai berikut


1 CREATE TABLE penduduk (
2 nik char(5) PRIMARY KEY,
3 nama varchar(30) NOT NULL,
4 jk char(1),
5
6 kode_kota char(5),
7 kode_prop char(10),
8 FOREIGN KEY (kode_kota,kode_prop)
9 REFERENCES kota (kode_kota,kode_prop)
10 )

Praktikum Basis Data Lanjut – MITEK – September 2007 12


2. Dengan SQL Enterprise Manager anda bisa mendapatkan diagram
sebagai berikut

3. Jalankan satu persatu query berikut


1 INSERT INTO penduduk VALUES
2 ('00001','adi','l','ban','yog')
3 INSERT INTO penduduk VALUES
4 ('00002','anita','p','ban','jatim')
5 INSERT INTO penduduk VALUES
6 ('00003','arina','p','ban','jabar')

Praktikum Basis Data Lanjut – MITEK – September 2007 13


Query mana yang error, kenapa ?

TUGAS

Di Propinsi Jawa Timur terdapat kota dan kabupaten (misalnya Kota


Malang dan Kabupaten Malang). Perbaiki strukur table sehingga setiap
record pada table kota bisa dibedakan apakah termasuk kota atau
kabupaten.

Susun query sehingga bisa menampilkan banyaknya kota dan kabupaten


di setiap propinsi dengan contoh sebagai berikut:
Propinsi Kota Kabupaten
-------------------------------
Jawa Timur 9 29
Jawa Barat 9 17

Praktikum Basis Data Lanjut – MITEK – September 2007 14


Bab
View
3
Tujuan
1. Membuat view dari satu atau beberapa table
2. Update data melalui view.

3.1. View
View merupakan virtual table yang dibangun dari satu atau beberapa
table. View tidak membuat penyimpanan secara fisik seperti table,
namun hanya menyimpan referensi/pointer ke record pada table-table
yang berkaitan.
Struktur umum sebuah view adalah
CREATE VIEW namaView (kolom1, kolom2, …) AS
SELECT kolom_a, kolom_b, …
FROM namaTable
WHERE predikat
Melalui view dapat dilakukan INSERT, UPDATE dan DELETE
dengan beberapa batasan.

Latihan 3.1
Pada latihan ini anda akan belajar membuat view yang dibentuk dari satu
table serta cara menambahkan record ke table melalui view.
Ikuti langkah-langkah berikut:
1. Gunakan kembali hasil Latihan 2.2. Isi data sebagai berikut

propinsi
kode_prop nama_prop jumlah_penduduk
---------- ------------------------- ---------------
jabar jawa barat 0
jak dki jakarta 0

Praktikum Basis Data Lanjut – MITEK – September 2007 15


jateng jawa tengah 0
jatim jawa timur 0
yog di yogyakarta 0

kota
kode_kota kode_prop nama_kota
--------- ---------- ------------------------------
ban jatim banyuwangi
ban yog bantul
bks jabar bekasi
blr jateng blora
byl jateng boyolali
kdr jatim kediri
kul yog kulon progo
mlg jatim malang
sby jatim surabaya
sle yog sleman

penduduk
nik nama jk kode_kota kode_prop
----- ---------------- ---- --------- ----------
00001 adi l ban yog
00002 anita p ban jatim
00003 ananda p kdr jatim
00004 badu l blr jateng
0005 budi l mlg jatim

2. Susun view sebagai berikut


1 CREATE VIEW vw_propinsi AS
2 SELECT kode_prop, nama_prop
3 FROM propinsi

3. Gunakan view tersebut


1 SELECT * FROM vw_propinsi

4. Anda bisa mengganti nama kolom (field) pada view sebagai berikut
1 DROP VIEW vw_propinsi
2
3 CREATE VIEW vw_propinsi (kode_propinsi,
4 nama_propinsi) AS
5 SELECT kode_prop, nama_prop
6 FROM propinsi
Praktikum Basis Data Lanjut – MITEK – September 2007 16
5. Gunakan view untuk mengisi record sebagai berikut
1 INSERT INTO vw_propinsi VALUES ('ban','banten')

6. Cek isi view dan table


1 SELECT * FROM vw_propinsi
2 SELECT * FROM propinsi

Mengapa jumlah_penduduk pada propinsi ‘banten’ diisi ‘0’ ?

Latihan 3.2
Pada latihan ini anda akan mempelajari view yang tidak bisa digunakan
untuk mengisi record
Ikuti langkah-langkah berikut:

1. Susun view sebagai berikut


1 CREATE VIEW vw_kota AS
2 SELECT kode_kota, nama_kota
3 FROM kota

2. Gunakan view tersebut


1 SELECT * FROM vw_kota

3. Gunakan view untuk mengisi record sebagai berikut


1 INSERT INTO vw_kota VALUES ('mdn','madiun')

Pesan kesalahan apa yang muncul, kenapa ?

Praktikum Basis Data Lanjut – MITEK – September 2007 17


Latihan 3.3
Pada latihan ini anda akan belajar membuat view yang dibentuk dari
beberapa table.
Ikuti langkah-langkah berikut:
1. Susun view sebagai berikut
1 CREATE VIEW vw_kota AS
2 SELECT k.kode_kota, k.nama_kota,
3 p.kode_prop, p.nama_prop
4 FROM kota k, propinsi p
5 WHERE k.kode_prop=p.kode_prop

2. Gunakan view tersebut dalam berbagai cara


1 SELECT * FROM vw_kota
2
3 SELECT nama_kota, nama_prop FROM vw_kota
4
5 SELECT nama_kota, nama_prop
6 FROM vw_kota
7 ORDER BY nama_prop, nama_kota

TUGAS 1

Isi data penduduk secukupnya. Susun view vw_penduduk_kota


sehingga jika diberikan query
SELECT *
FROM vw_penduduk_kota
ORDER BY total_penduduk DESC

akan ditampilkan sebagai berikut


nama_kota total_penduduk
------------------------------ --------------
kediri 8
malang 7
blora 2
bantul 1
banyuwangi 1

Praktikum Basis Data Lanjut – MITEK – September 2007 18


TUGAS 2

Isi data penduduk secukupnya. Susun view vw_penduduk_kota_rinci


sehingga jika diberikan query
SELECT *
FROM vw_penduduk_kota_rinci

akan ditampilkan sebagai berikut


nama_kota propinsi laki-laki perempuan total
------------ -------------- ---------- ---------- -----
kediri jawa timur 10 11 21
malang jawa timur 12 7 19
blora jawa tengah 8 12 20
bantul di yogyakarta 6 11 17
banyuwangi jawa timur 13 10 23

Praktikum Basis Data Lanjut – MITEK – September 2007 19


Bab
Transact-SQL
4
Tujuan
1. Membuat script Transact-SQL

4.1. Transact-SQL
Transact-SQL merupakan bahasa pemrograman yang dikembangkan
dari SQL. Transact-SQL mengembangkan kemampuan SQL dengan
menambahkan instruksi logic seperti halnya sebuah bahasa
pemrograman.
Latihan 4.1
Pada latihan ini anda akan belajar membuat Transact-SQL sederhana.
1. Buat table dengan DDL sebagai berikut
1 CREATE TABLE prodi (
2 kode_prodi CHAR(3) PRIMARY KEY,
3 nama_prodi CHAR(30)
4 )
5
6 CREATE TABLE mahasiswa (
7 nim CHAR(4 ) CONSTRAINT ck_nim
8 CHECK (nim<>'') PRIMARY KEY,
9 nama CHAR(20) CONSTRAINT ck_nama
10 CHECK (nama<>'') NOT NULL,
11 jk CHAR CONSTRAINT ck_jk
12 CHECK (jk='l' or jk='p') NOT NULL,
13 alamat CHAR(20),
14 kota CHAR(15),
15 ipk NUMERIC(4,2),
16 kode_prodi CHAR(3) FOREIGN KEY
17 REFERENCES prodi(kode_prodi)
18 )

Praktikum Basis Data Lanjut – MITEK – September 2007 20


2. Isi data secukupnya dengan contoh sebagai berikut
prodi
kode_prodi nama_prodi
---------- ------------------------------
mi manajemen informatika
tk teknik komputer

mahasiswa
nim nama jk alamat kota ipk kode_prodi
------------------------------------------------------
0001 adi l kelud 72 malang 3.20 mi
0002 ani p mawar 19 malang 2.90 tk
0003 ali l krakatau 54 malang 3.10 mi
0004 budi l kerinci 84 surabaya 2.50 tk
0005 badu l semeru 87 kediri 2.50 tk

3. Tulis dan jalankan script berikut


1 DECLARE @ipk_batas NUMERIC(4,2)
2 SET @ipk_batas = 3.0
3
4 SELECT nim,nama,ipk FROM mahasiswa
WHERE ipk>@ipk_batas ORDER BY ipk

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 21


4. Tulis dan jalankan script berikut
1 DECLARE @ipk_batas NUMERIC(4,2)
2 SET @ipk_batas = 3.0
3
4 SELECT TOP 1 nim,nama,ipk FROM mahasiswa
5 WHERE ipk>@ipk_batas ORDER BY ipk DESC
Jelaskan yang dilakukan script di atas

5. Tulis dan jalankan script berikut


1 DECLARE @ipk_max NUMERIC(4,2),
2 @ipk_min NUMERIC(4,2)
3 SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk)
4 FROM mahasiswa
5
6 SELECT 'IPK Maximum = ', @ipk_max
7 SELECT 'IPK Minimum = ', @ipk_min
Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 22


6. Tulis dan jalankan script berikut
1 DECLARE @ipk_avg NUMERIC(4,2)
2 SELECT @ipk_avg=AVG(ipk) FROM mahasiswa
3
4 SELECT nim,nama,ipk FROM mahasiswa
5 WHERE ipk>@ipk_avg ORDER BY ipk

Jelaskan yang dilakukan script di atas

Latihan 4.2
Pada latihan ini anda akan belajar membuat Transact-SQL dengan
melibatkan statemen seleksi CASE...WHEN.
1. Tulis dan jalankan script berikut
1 SELECT
2 nim,
3 nama,
4 jenis_kelamin =
5 CASE
6 WHEN jk='l' THEN 'Laki-laki'
7 WHEN jk='p' THEN 'Perempuan'
8 ELSE 'Tidak jelas'
9 END
10 FROM mahasiswa

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 23


2. Tulis dan jalankan script berikut
1 SELECT
2 nim,nama,ipk,
3 keterangan =
4 CASE
5 WHEN ipk<2.0 THEN 'Jelek'
6 WHEN ipk<2.5 THEN 'Pas-pasan'
7 WHEN ipk<3.0 THEN 'Lumayan'
8 WHEN ipk<=4.0 THEN 'Hebat'
9 END
10 FROM mahasiswa ORDER BY ipk DESC

Jelaskan yang dilakukan script di atas

3. Tulis dan jalankan script berikut


1 DECLARE @ipk_avg NUMERIC(4,2)
2 SELECT @ipk_avg=AVG(ipk) FROM mahasiswa
3
4 SELECT 'IPK rata-rata= ', @ipk_avg
5
6 SELECT
7 nim, nama, ipk,
8 keterangan =
9 CASE
10 WHEN ipk=@ipk_avg THEN 'pas'
11 WHEN ipk<@ipk_avg THEN 'di bawah rata-rata'
12 WHEN ipk>@ipk_avg THEN 'di atas rata-rata'
13 ELSE 'Tidak Jelas'
14 END
15 FROM mahasiswa

Praktikum Basis Data Lanjut – MITEK – September 2007 24


Jelaskan yang dilakukan script di atas

Latihan 4.3
Pada latihan ini anda akan belajar membuat Transact-SQL dengan
melibatkan fungsi konversi angka ke string.
1. Tulis dan jalankan script berikut
1 PRINT 'Hello Word'
2 PRINT 'Today is ' + CONVERT(CHAR(30), GETDATE())

Jelaskan yang dilakukan script di atas

2. Tulis dan jalankan script berikut


1 DECLARE @ipk_max NUMERIC(4,2),
2 @ipk_min NUMERIC(4,2)
3 SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk)
4 FROM mahasiswa
5
6 PRINT 'IPK Maximum = ' +
7 CONVERT(CHAR(30), @ipk_max)
8 PRINT 'IPK Minimum = ' +
9 CONVERT(CHAR(30), @ipk_min)

Jelaskan yang dilakukan script di atas

Praktikum Basis Data Lanjut – MITEK – September 2007 25


Bab
Procedure
5
Tujuan
1. Membuat procedure.

5.1. Procedure
Procedure adalah program yang dapat dipanggil oleh program
lainnya. Struktur umum sebuah procedure adalah
CREATE PROCEDURE namaProcedure (parameter) AS
Deklarasi variable


RETURN
Kata PROCEDURE bisa disingkat PROC. Untuk menjalankan procedure
digunakan EXEC seperti contoh berikut
EXEC namaProcedure

Latihan 5.1
Pada latihan ini anda akan belajar membuat procedure sederhana.
Gunakan table pada Praktikum 4.
1. Berikut ini procedure untuk manampilkan data mahasiswa
1 CREATE PROC PrintMahasiswa AS
2 SELECT * FROM Mahasiswa
3 RETURN

Jalankan procedure dengan mengetikkan EXEC PrintMahasiswa.

Praktikum Basis Data Lanjut – MITEK – September 2007 26


2. Berikut ini procedure yang mempunyai parameter
1 CREATE PROC PrintMahasiswaTertentu (@jk CHAR, @kota
2 CHAR(15)) AS
3 SELECT * FROM Mahasiswa
4 WHERE jk=@jk AND kota=@kota
5 RETURN

Jalankan procedure dengan berbagai cara berikut


1 EXEC PrintMahasiswaTertentu 'l', 'malang'
2 EXEC PrintMahasiswaTertentu 'p', 'surabaya'
3 EXEC PrintMahasiswaTertentu 'l'

Bagian mana yang salah, kenapa ?

3. Parameter procedure bisa diberi nilai default seperi contoh berikut


1 ALTER PROC PrintMahasiswaTertentu (@jk CHAR(1)='l',
2 @kota CHAR(15)='malang') AS
3 SELECT * FROM Mahasiswa
4 WHERE jk=@jk AND kota=@kota
5 RETURN

Kata kunci ALTER digunakan untuk mengganti procedure yang


sudah ada. Jalankan procedure dengan berbagai cara berikut
1 EXEC PrintMahasiswaTertentu 'p', 'surabaya'
2 EXEC PrintMahasiswaTertentu 'p'
3 EXEC PrintMahasiswaTertentu

Praktikum Basis Data Lanjut – MITEK – September 2007 27


Latihan 5.2
Pada latihan ini anda akan belajar membuat procedure dengan parameter
output.
1. Buat procedure berikut
1 CREATE PROC CariRataIP @hasil NUMERIC(4,2) OUTPUT
2 AS
3 SELECT @hasil=AVG(ipk) FROM Mahasiswa
4 RETURN

Jalankan procedure dengan cara berikut


1 DECLARE @rata NUMERIC(4,2)
2 EXEC CariRataIP @rata OUTPUT
3 PRINT 'Rata-rata IPK mahasiswa = '+
4 CONVERT (CHAR(4),@rata)

3. Procedure yang telah dibuat bisa dipanggil procedure lain sebagai


berikut
1 CREATE PROC MahasiswaPandai AS
2 DECLARE @rata NUMERIC(4,2)
3 EXEC CariRataIP @rata OUTPUT
4 PRINT 'Rata-rata IPK mahasiswa = '+
5 CONVERT (CHAR(4),@rata)
6 PRINT 'Daftar Mahasiswa Pandai'
7 SELECT nim,nama,ipk FROM mahasiswa
8 WHERE ipk>@rata
9 RETURN

Jika procedure MahasiswaPandai dijalankan akan dihasilkan


Rata-rata IPK mahasiswa = 2.84
Daftar Mahasiswa dengan IPK Di Atas Rata-Rata
nim nama ipk
---- -------------------- ------
0001 adi 3.20
0002 ani 2.90
0003 ali 3.10

(3 row(s) affected)

Praktikum Basis Data Lanjut – MITEK – September 2007 28


TUGAS 1
Gunakan table pada Praktikum 3. Susun procedure untuk menampilkan
kota yang penduduknya lebih banyak dari penduduk kota ‘malang’.

TUGAS 2
Susun procedure dengan parameter kode_propinsi. Procedure ini
menghasilkan output rata-rata penduduk di tiap kota pada propinsi
tersebut.

TUGAS 3
Susun procedure dengan parameter kode_propinsi. Gunakan procedure
pada Tugas 2. Tampilkan kota yang penduduknya lebih banyak daripada
rata-rata penduduk di tiap kota pada propinsi tersebut.

Catatan:

Untuk semua soal di atas, banyaknya penduduk merupakan hasil


perhitungan agregat dari table penduduk.

Praktikum Basis Data Lanjut – MITEK – September 2007 29


Bab
Trigger
6
Tujuan
1. Membuat trigger.

6.1. Trigger
Trigger adalah blok program Transact-SQL yang diasosiasikan
dengan table dan disimpan dalam database. Trigger dieksekusi bila
terjadi database event (INSERT, UPDATE, DELETE).
Struktur umum sebuah trigger adalah
CREATE TRIGGER namaTriger
ON namaTable
FOR INSERT, UPDATE, DELETE

Deklarasi variable


RETURN

Latihan 6.1
Pada latihan ini anda akan belajar membuat trigger sederhana. Gunakan
table pada Praktikum 4.
1. Berikut ini trigger yang diekskusi pada saat penambahan record ke
table mahasiswa
1 CREATE TRIGGER trInsertMhs
2 ON mahasiswa
3 FOR INSERT
4 AS
5 PRINT 'Record baru : ' +
6 CONVERT (CHAR(30), GetDate(), 103)
7 DECLARE @nama char(20)
8 SELECT @nama=nama FROM INSERTED
Praktikum Basis Data Lanjut – MITEK – September 2007 30
9 PRINT 'Nama mahasiswa : '+@nama

Tambahkan record ke table mahasiwa


1 INSERT INTO mahasiswa VALUES ('0006','bobo','l',
2 'galunggung 44','gresik',3.5,'mi')

SQL Query Analyzer akan memberikan pesan sebagai berikut


Record baru : 10/10/2007

(1 row(s) affected)

Nama mahasiswa : bobo

2. Berikut ini trigger yang diekskusi pada saat update record table
mahasiswa
1 CREATE TRIGGER trUpdateMhs
2 ON mahasiswa
3 FOR UPDATE
4 AS
5 PRINT 'Update Record : ' + CONVERT (CHAR(30),
6 GetDate(), 103)
7 PRINT 'Record Lama'
8 SELECT * FROM DELETED
9 PRINT 'Record Baru'
10 SELECT * FROM INSERTED

Tambahkan record ke table mahasiwa


1 UPDATE Mahasiswa SET nama='bibi' WHERE nama='bobo'

SQL Query Analyzer akan memberikan pesan sebagai berikut


Update Record : 10/10/2007
Record Lama
nim nama jk alamat kota ipk kode_prodi
-----------------------------------------------------
0006 bobo l galunggung 44 gresik 3.50 mi

(1 row(s) affected)

Record Baru
nim nama jk alamat kota ipk kode_prodi
-----------------------------------------------------

Praktikum Basis Data Lanjut – MITEK – September 2007 31


0006 bibi l galunggung 44 gresik 3.50 mi

(1 row(s) affected)

Latihan 6.2
Pada latihan ini anda akan belajar membuat trigger yang berkaitan
dengan banyak table.
1. Buat table counter
1 CREATE TABLE counter (
2 kota CHAR(10) PRIMARY KEY,
3 jumlah_mhs INT NOT NULL
4 )

3. Hapus semua record pada table mahasiswa

2. Berikut ini trigger yang mengupdate field jumlah_mhs pada table


counter jika ada penambahan record pada table mahasiswa (hapus
dulu trigger sebelumnya)
1 CREATE TRIGGER trInsertMhs
2 ON mahasiswa
3 FOR INSERT
4 AS
5 DECLARE @kota CHAR(15)
6 DECLARE @adakota INT
7 SELECT @kota=kota FROM INSERTED
8 SELECT @adakota=COUNT(kota) FROM Counter
9 WHERE kota=@kota
10
11 IF @adakota=0
12 INSERT INTO counter VALUES (@kota, 1)
13 ELSE
14 UPDATE counter SET jumlah_mhs = jumlah_mhs+1
15 WHERE counter.kota = @kota

Praktikum Basis Data Lanjut – MITEK – September 2007 32


3. Masukkan lagi data mahasiswa sebagai berikut
nim nama jk alamat kota ipk kode_prodi
------------------------------------------------------
0001 adi l kelud 72 malang 3.20 mi
0002 ani p mawar 19 malang 2.90 tk
0003 ali l krakatau 54 malang 3.10 mi
0004 budi l kerinci 84 surabaya 2.50 tk
0005 badu l semeru 87 kediri 2.50 tk

4. Cek isi table counter


kota jumlah_mhs
---------- -----------
kediri 1
malang 3
surabaya 1

(3 row(s) affected)

TUGAS 1
Trigger pada Latihan 6.2 akan mengupdate field jumlah_mhs pada table
counter jika ada penambahan record pada table mahasiswa. Bagaimana
jika ada penghapusan record atau ada mahasiswa pindah kota ? Susun
trigger baru untuk mengatasi hal ini.

TUGAS 2
Pada table prodi tambahkan field jumlah_mhs. Modifikasi trigger pada
Tugas 1 sehingga juga bisa mengupdate table prodi.

Praktikum Basis Data Lanjut – MITEK – September 2007 33

Anda mungkin juga menyukai