Upload
brad-brown
View
543
Download
18
Embed Size (px)
Citation preview
Modul PraktikumSemester Ganjil 2007-2008
Sistem Basis Data Lanjut
Wayan Firdaus Mahmudy
Program Diploma Tiga Manajemen Informatika dan Teknik Komputer
Fakultas Matematika dan Ilmu Pengetahuan AlamUniversitas 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
1 Data Definition Language (DDL)
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 databasename 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 kesalahanServer: Msg 5030, Level 16, State 2, Line 1The 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 masterEXEC sp_dboption akademik, 'single_user', 'TRUE'
Pastikan sebelum perintah di atas di eksekusi, pada “SQL Enterprise Manajer” database “akademik” tidak aktif.
Ulangi menjalankanEXEC 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
123456
CREATE DATABASE dbPrak01
CREATE TABLE kota ( kode char(5) PRIMARY KEY, nama char(30))
2. Aktifkan database dbPrak01 kemudian jalankan satu persatu query berikut
123456
INSERT kota(kode,nama) VALUES ('mlg','malang')INSERT kota VALUES ('kdr','kediri')INSERT kota VALUES ('kdr','kendari')INSERT kota(kode) VALUES ('x')INSERT kota VALUES ('y','')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
123456
DROP TABLE kota
CREATE TABLE kota ( kode char(5) PRIMARY KEY, nama char(30) NOT NULL)
4. Jalankan satu persatu query berikut
12
INSERT kota(kode) VALUES ('x')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
123456
CREATE TABLE propinsi ( kode_prop char(10) PRIMARY KEY, nama_prop char(30) NOT NULL, CONSTRAINT uq_nama_prop UNIQUE (nama_prop), CONSTRAINT ck_nama_prop CHECK (nama_prop<>''), )
2. Jalankan satu persatu query berikut
12
INSERT INTO propinsi VALUES ('jatim','jawa timur')INSERT INTO propinsi VALUES ('jatim','jawa barat')
Praktikum Basis Data Lanjut – MITEK – September 2007 5
3456
INSERT INTO propinsi VALUES ('jtm','jawa timur')
INSERT INTO propinsi VALUES ('jabar','')INSERT INTO propinsi VALUES ('jabar','jawa barat')
Query mana yang error, kenapa ?
3. Anda bisa menambahkan field pada table propinsi sebagai berikut
12
ALTER TABLE propinsi ADD jumlah_penduduk INT DEFAULT 0
4. Jalankan satu persatu query berikut
1234
INSERT INTO propinsi(kode_prop,nama_prop) VALUES ('jateng','jawa tengah')INSERT INTO propinsi VALUES ('jak', 'dki jakarta', -1)
5. Lakukan SELECT, anda akan mendapatkan isi table sebagai berikutkode_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
12345
UPDATE propinsi SET jumlah_penduduk=0 WHERE jumlah_penduduk<0
UPDATE propinsi SET jumlah_penduduk=0 WHERE jumlah_penduduk IS NULL
7. Anda bisa menambahkan constraint pada field jumlah_penduduk sebagai berikut
123
ALTER TABLE propinsi ADD CONSTRAINT ck_jumlah_penduduk 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
12
ALTER TABLE propinsi 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 Keterangan1 Nim Char(10) Primary Key, panjang harus
tepat 10 karakter2 Nama Varchar(20) Tidak boleh kosong3 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, O4 Ipk Numeric Interval 0 sampai 4
Praktikum Basis Data Lanjut – MITEK – September 2007 8
Bab
2 Relationship
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
123456789101112131415161718
CREATE TABLE propinsi ( kode_prop char(10) PRIMARY KEY, nama_prop char(30) NOT NULL, jumlah_penduduk INT DEFAULT 0, CONSTRAINT uq_nama_prop UNIQUE (nama_prop), CONSTRAINT ck_nama_prop CHECK (nama_prop<>''), CONSTRAINT ck_jumlah_penduduk CHECK (jumlah_penduduk>=0) )
CREATE TABLE kota ( kode_kota char(5), kode_prop char(10) FOREIGN KEY REFERENCES propinsi (kode_prop), nama_kota char(30) NOT NULL, PRIMARY KEY (kode_kota, kode_prop))
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
1234
INSERT kota VALUES ('ban','jatim','banyuwangi')INSERT kota VALUES ('ban','yog','bantul')INSERT kota VALUES ('ban','jatim','bangkalan')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
12
DELETE FROM propinsi WHERE kode_prop='jateng'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
12345678910
CREATE TABLE penduduk ( nik char(5) PRIMARY KEY, nama varchar(30) NOT NULL, jk char(1),
kode_kota char(5) FOREIGN KEY REFERENCES kota (kode_kota), kode_prop char(10) FOREIGN KEY REFERENCES propinsi (kode_prop),)
Pesan kesalahan apa yang muncul, kenapa ?
2. Perbaiki DDL sebelumnya sebagai berikut
12345678910
CREATE TABLE penduduk ( nik char(5) PRIMARY KEY, nama varchar(30) NOT NULL, jk char(1),
kode_kota char(5), kode_prop char(10), FOREIGN KEY (kode_kota,kode_prop) REFERENCES kota (kode_kota,kode_prop))
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
123456
INSERT INTO penduduk VALUES ('00001','adi','l','ban','yog')INSERT INTO penduduk VALUES ('00002','anita','p','ban','jatim')INSERT INTO penduduk VALUES ('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 29Jawa Barat 9 17
Praktikum Basis Data Lanjut – MITEK – September 2007 14
Bab
3 View
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, …) ASSELECT kolom_a, kolom_b, …FROM namaTableWHERE 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
propinsikode_prop nama_prop jumlah_penduduk ---------- ------------------------- --------------- jabar jawa barat 0jak dki jakarta 0
Praktikum Basis Data Lanjut – MITEK – September 2007 15
jateng jawa tengah 0jatim jawa timur 0yog di yogyakarta 0
kotakode_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
penduduknik 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
123
CREATE VIEW vw_propinsi ASSELECT kode_prop, nama_propFROM propinsi
3. Gunakan view tersebut
1 SELECT * FROM vw_propinsi
4. Anda bisa mengganti nama kolom (field) pada view sebagai berikut
123456
DROP VIEW vw_propinsi
CREATE VIEW vw_propinsi (kode_propinsi, nama_propinsi) ASSELECT kode_prop, nama_propFROM 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
12
SELECT * FROM vw_propinsiSELECT * 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
123
CREATE VIEW vw_kota ASSELECT kode_kota, nama_kotaFROM 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
12345
CREATE VIEW vw_kota ASSELECT k.kode_kota, k.nama_kota, p.kode_prop, p.nama_propFROM kota k, propinsi pWHERE k.kode_prop=p.kode_prop
2. Gunakan view tersebut dalam berbagai cara
1234567
SELECT * FROM vw_kota
SELECT nama_kota, nama_prop FROM vw_kota
SELECT nama_kota, nama_prop FROM vw_kota 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 8malang 7blora 2bantul 1banyuwangi 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 21malang jawa timur 12 7 19blora jawa tengah 8 12 20bantul di yogyakarta 6 11 17banyuwangi jawa timur 13 10 23
Praktikum Basis Data Lanjut – MITEK – September 2007 19
Bab
4 Transact-SQL
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
123456789101112131415161718
CREATE TABLE prodi ( kode_prodi CHAR(3) PRIMARY KEY, nama_prodi CHAR(30))
CREATE TABLE mahasiswa ( nim CHAR(4 ) CONSTRAINT ck_nim CHECK (nim<>'') PRIMARY KEY, nama CHAR(20) CONSTRAINT ck_nama CHECK (nama<>'') NOT NULL, jk CHAR CONSTRAINT ck_jk CHECK (jk='l' or jk='p') NOT NULL, alamat CHAR(20), kota CHAR(15), ipk NUMERIC(4,2), kode_prodi CHAR(3) FOREIGN KEY REFERENCES prodi(kode_prodi))
Praktikum Basis Data Lanjut – MITEK – September 2007 20
2. Isi data secukupnya dengan contoh sebagai berikut
prodikode_prodi nama_prodi ---------- ------------------------------ mi manajemen informatika tk teknik komputer
mahasiswanim 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
1234
DECLARE @ipk_batas NUMERIC(4,2)SET @ipk_batas = 3.0
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
12345
DECLARE @ipk_batas NUMERIC(4,2)SET @ipk_batas = 3.0
SELECT TOP 1 nim,nama,ipk FROM mahasiswa WHERE ipk>@ipk_batas ORDER BY ipk DESC
Jelaskan yang dilakukan script di atas
5. Tulis dan jalankan script berikut
1234567
DECLARE @ipk_max NUMERIC(4,2), @ipk_min NUMERIC(4,2)SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk) FROM mahasiswa
SELECT 'IPK Maximum = ', @ipk_maxSELECT 'IPK Minimum = ', @ipk_min
Jelaskan yang dilakukan script di atas
Praktikum Basis Data Lanjut – MITEK – September 2007 22
6. Tulis dan jalankan script berikut
12345
DECLARE @ipk_avg NUMERIC(4,2)SELECT @ipk_avg=AVG(ipk) FROM mahasiswa
SELECT nim,nama,ipk FROM mahasiswa 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
12345678910
SELECT nim, nama, jenis_kelamin = CASE WHEN jk='l' THEN 'Laki-laki' WHEN jk='p' THEN 'Perempuan' ELSE 'Tidak jelas' END FROM mahasiswa
Jelaskan yang dilakukan script di atas
Praktikum Basis Data Lanjut – MITEK – September 2007 23
2. Tulis dan jalankan script berikut
12345678910
SELECT nim,nama,ipk, keterangan = CASE WHEN ipk<2.0 THEN 'Jelek' WHEN ipk<2.5 THEN 'Pas-pasan' WHEN ipk<3.0 THEN 'Lumayan' WHEN ipk<=4.0 THEN 'Hebat' END FROM mahasiswa ORDER BY ipk DESC
Jelaskan yang dilakukan script di atas
3. Tulis dan jalankan script berikut
123456789101112131415
DECLARE @ipk_avg NUMERIC(4,2)SELECT @ipk_avg=AVG(ipk) FROM mahasiswa
SELECT 'IPK rata-rata= ', @ipk_avg
SELECT nim, nama, ipk, keterangan = CASE WHEN ipk=@ipk_avg THEN 'pas' WHEN ipk<@ipk_avg THEN 'di bawah rata-rata' WHEN ipk>@ipk_avg THEN 'di atas rata-rata' ELSE 'Tidak Jelas' END 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
12
PRINT 'Hello Word'PRINT 'Today is ' + CONVERT(CHAR(30), GETDATE())
Jelaskan yang dilakukan script di atas
2. Tulis dan jalankan script berikut
123456789
DECLARE @ipk_max NUMERIC(4,2), @ipk_min NUMERIC(4,2)SELECT @ipk_max=MAX(ipk), @ipk_min=MIN(ipk) FROM mahasiswa
PRINT 'IPK Maximum = ' + CONVERT(CHAR(30), @ipk_max)PRINT 'IPK Minimum = ' + CONVERT(CHAR(30), @ipk_min)
Jelaskan yang dilakukan script di atas
Praktikum Basis Data Lanjut – MITEK – September 2007 25
Bab
5 Procedure
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
123
CREATE PROC PrintMahasiswa AS SELECT * FROM MahasiswaRETURN
Jalankan procedure dengan mengetikkan EXEC PrintMahasiswa.
Praktikum Basis Data Lanjut – MITEK – September 2007 26
2. Berikut ini procedure yang mempunyai parameter
12345
CREATE PROC PrintMahasiswaTertentu (@jk CHAR, @kota CHAR(15)) AS SELECT * FROM Mahasiswa WHERE jk=@jk AND kota=@kotaRETURN
Jalankan procedure dengan berbagai cara berikut
123
EXEC PrintMahasiswaTertentu 'l', 'malang'EXEC PrintMahasiswaTertentu 'p', 'surabaya'EXEC PrintMahasiswaTertentu 'l'
Bagian mana yang salah, kenapa ?
3. Parameter procedure bisa diberi nilai default seperi contoh berikut
12345
ALTER PROC PrintMahasiswaTertentu (@jk CHAR(1)='l', @kota CHAR(15)='malang') AS SELECT * FROM Mahasiswa WHERE jk=@jk AND kota=@kotaRETURN
Kata kunci ALTER digunakan untuk mengganti procedure yang sudah ada. Jalankan procedure dengan berbagai cara berikut
123
EXEC PrintMahasiswaTertentu 'p', 'surabaya'EXEC PrintMahasiswaTertentu 'p'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
1234
CREATE PROC CariRataIP @hasil NUMERIC(4,2) OUTPUT AS SELECT @hasil=AVG(ipk) FROM Mahasiswa RETURN
Jalankan procedure dengan cara berikut
1234
DECLARE @rata NUMERIC(4,2)EXEC CariRataIP @rata OUTPUTPRINT 'Rata-rata IPK mahasiswa = '+ CONVERT (CHAR(4),@rata)
3. Procedure yang telah dibuat bisa dipanggil procedure lain sebagai berikut
123456789
CREATE PROC MahasiswaPandai AS DECLARE @rata NUMERIC(4,2) EXEC CariRataIP @rata OUTPUT PRINT 'Rata-rata IPK mahasiswa = '+ CONVERT (CHAR(4),@rata) PRINT 'Daftar Mahasiswa Pandai' SELECT nim,nama,ipk FROM mahasiswa WHERE ipk>@rataRETURN
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
6 Trigger
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
12345678
CREATE TRIGGER trInsertMhs ON mahasiswa FOR INSERTAS PRINT 'Record baru : ' + CONVERT (CHAR(30), GetDate(), 103) DECLARE @nama char(20) SELECT @nama=nama FROM INSERTED
Praktikum Basis Data Lanjut – MITEK – September 2007 30
9 PRINT 'Nama mahasiswa : '+@nama
Tambahkan record ke table mahasiwa
12
INSERT INTO mahasiswa VALUES ('0006','bobo','l', '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
12345678910
CREATE TRIGGER trUpdateMhs ON mahasiswa FOR UPDATEAS PRINT 'Update Record : ' + CONVERT (CHAR(30), GetDate(), 103) PRINT 'Record Lama' SELECT * FROM DELETED PRINT 'Record Baru' 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 Lamanim nama jk alamat kota ipk kode_prodi -----------------------------------------------------0006 bobo l galunggung 44 gresik 3.50 mi
(1 row(s) affected)
Record Barunim 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
1234
CREATE TABLE counter ( kota CHAR(10) PRIMARY KEY, jumlah_mhs INT NOT NULL)
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)
123456789101112131415
CREATE TRIGGER trInsertMhs ON mahasiswa FOR INSERTAS DECLARE @kota CHAR(15) DECLARE @adakota INT SELECT @kota=kota FROM INSERTED SELECT @adakota=COUNT(kota) FROM Counter WHERE kota=@kota
IF @adakota=0 INSERT INTO counter VALUES (@kota, 1) ELSE UPDATE counter SET jumlah_mhs = jumlah_mhs+1 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 1malang 3surabaya 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