Tugas Uts Sbdii Soleh Nim.20142034 Salatiga

download Tugas Uts Sbdii Soleh Nim.20142034 Salatiga

of 18

description

SISTEM BASIS DATA II

Transcript of Tugas Uts Sbdii Soleh Nim.20142034 Salatiga

SISTEM BASIS DATA II

TUGAS UTSTRIGGER

Disusun Oleh;S O L E HNIM. 2014062034 (KELAS NON REGULER SALATIGA)

PROGRAM STUDI TEKNIK INFORMATIKAFAKULTAS TEKNIKUNIVERSITAS SAHID SURAKARTA2015

MODUL VFUNCTION DAN TRIGGER

1. Teori TriggerTrigger dalam database diartikan sebagai procedural code that is autom atically executed in response to certain events on a particular table or view i n a database. SehinggaTrigger merupakan sekumpulan perintah atau sintaks yang akan secara otomatis dijalankan jika terjadi operasi tertentu dalam tabel atau view. Trigger digunakan untuk memanggil satu atau beberapa perintah SQL secara otomatis sebelum atau sesudah terjadi proses INSERT, UPDATE atau DELETE dari suatu tabel. Sebagai contoh misalnya kita ingin menyimpan id pelanggan secara otomatis ke tabel logsebelum m enghapus data di tabel pelanggan.Di MySQL, Triggers mulai dikenal di versi MySQL 5.0, dan di versi saat ini (5.1.4) fungsionalitasnya sudah bertambah. Pada versi selanjutnya pihak pengembang MySQL berjanji akan lebih menguatkan (menambah) fitur trigger ini. Trigger sering di gunakan, antara lain untuk:Melakukan update data otomatis jika terjadi perubahan. Contohnya adalah dal am sistem penjualan, jika dientri barang baru maka stock akan bertambah secara otomatis. Trigger dapat digunakan untuk mengimplementasikan suatu sistem log. Setiap terjadi perubahan, secara otomatis akan menyimpan ke tabel log. Trigger dapat digunakan untuk mel akukan validasi dan verifikasi data sebelum data tersebut disimpan.

Membuat tabel log untuk menampung hasil percobaan trigger dengan berisi tiga field: id_log, waktu, dan deskripsi

2.Membuat Trigger BaruBerikut ini bentuk umum perintah untuk membuat triggers:CREATE TRIGGER name[BEFORE|AFTER] [INSERT|UP DATE|DELETE]ON tablenameFOR EACH ROW statementKeterangan dari bentuk umum perintah membuat Trigger: name, Nama trigger mengikuti peraturan penam aan variabel / identi fier dal am MySQL [BEFORE | AFTER]di gunakan untuk menentukan kapan proses secara otomatis akan dieksekusi, sebelum atau sesudah proses. [INSERT | UPDATE | DELETE]digunakan unt uk menentukan event (proses) yang dijadikan trigger (pemicu) untuk menj alankan perint ah-perintah di dal am triggers. Tablename, merupakan nama tabel dimana trigger berada. statement, merupakan sekum pulan perintah atau query yang akan secara otomatis dijalankan jika event / proses yang didefinisikan sebelum nya aktif. Statement atau perintah dalam trigger dapat berupa satu perintah saja, dan dapat juga beberapa perintah sekaligus. Jika terdapat beberapa perintah dalam trigger, maka gunakan perint ah BEGIN dan ENDuntuk m ngawali dan mengakhiri perintah.Di dalam statement trigger, kita dapat mengakses record tabel sebelum atau sesudah proses dengan menggunakan NEW dan OLD. NEW digunakan untuk mengambil record yang akan di pros es (insert atau update), sedangkan OLDdigunakan untuk mengakses record y ang sudah diproses (update atau delete).Berikut ini contoh trigger yang akan mencatat akti vitas ke tabel log setiap terjadi proses insert ke tabel pelanggan:DELIMITER $$CREATE TRIGGER penjualan.before_insert BEFORE INSERT ON penjual an.pelangganFOR EACH ROW BEGININSE RT INTO `log` (description, `datetim e`, user_id)VALUES (CONCAT('Insert data ke tabel pelanggan id_plg = ', NEW.id_pelanggan), now(), user());END;$$DELIMITER ;

Membuat trigger baru dengan nama BeforeInsertDosen yang dijalankan pada table dosen dan aktif sebelum (before insert) table dosen ditambahkan datanya. Trigger ini akan menyisipkan data baru ke table log sesuai dengan data dosen yang akan ditambahkan.

Menampilkan trigger apa saja yang terdapat di dalam database aktif (akademik) dengan perintah show triggers. Dapat diketahui bahwa trigger dengan nama BeforeInsertDosen akan dijalankan ketika event INSERT pada table dosen dengan statement menambahkan data baru ke table log di kolom deskripsi dengan timing BEFORE. Sedangkan data yang ditambahkan ke dalam table log berupa teks Add New Dosen: [kode dosen] [nama dosen]

Menampilkan data pada table dosen dan table log sebelum trigger BeforeInsertDosen diaktifkan.

Menambahkan data ke table dosen dengan perintah insert dengan keterangan berikut: Kode dosen: D99 Nama dosen: Parsumo, ST, MT Alamat dosen: Jl. Buntu no.01 Kota dosen: YogyakartaSelanjutnya menampilkan data pada tabel dosen, sehingga muncul data yang baru ditambahkan tadi.

Menampilkan data pada table log. Sebelum data dosen ditambahkan, table ini masih kosong. Dan trigger BeforeInsertDosen diaktifkan bersamaan dengan sebelum data dosen baru X00 ditambahkan, sehingga pada table log sekarang terdapat satu baris data yaitu: id_log: 1 (auto increment) waktu: waktu ketika trigger aktif yaitu 2015-11-06 21:02:45 deskripsi: Nambah Dosen baru: D99 Parsumo, ST, MT

3. Menghapus TriggerUntuk menghapus trigger, dapat menggunakan perintah DROP TRIGGERdengan diikuti dengan nama tabel dan nam a triggernya. Berikut ini bentuk um um dan cont oh perint ah untuk menghapus trigger.Bentuk umum dan cont oh menghapus trigger:DROP TRIGGER tablename.triggername;Contoh menghapus trigger bernama before_insert yang ada di tabel pelanggan.DROP TRIGGER penjualan.before_insert;

Perintah untuk menghapus trigger dengan nama BeforeInsertDosen

Menampilkan data trigger apa saja yang ada di database aktif. Karena sebelumnya trigger BeforeInsertDosen sudah dihapus, maka perintah kedua menghasilkan empty set

4. Function dan Stored ProcedureFunction dan Stored Procedure merupakan fitur utama yang paling penting di MySQL 5. Function dan Stored Procedure merupakan suatu kumpulan perintah atau statement yang disimpan dan di eksekusidi server database MySQL. Menggunakan SP (Stored Procedure) dapat menyusun program sederhana berbasis sintaks SQL untuk menjalankan fungsi tertentu. Hal ini menjadikan aplikasi yang kita buat lebih efektif dan efisien.Berikut ini beberapa keuntungan menggunakan Stored Procedure:a) Lebih cepatHal ini karena kumpulan perintah query dijalankan langsung diserver. Berbeda dengan jika dijalankan secara sekuensial di bahasa pem rograman, akan lebih lambat karena harus bolak-balik antara client dan server.b) Menghilangkan duplikasi proses, pemeliharaan yang mudah. Pada dasarnya operasi yang terj adi disuatu aplikasi terhadap database adalah sama. Secara umum, di alam aplikasi biasanya terdapat operasi untuk vali dasi data inputan, m enam bahkan record baru, mengubah record, m enghapus record dan sebagainya. Dengan SP, mungkin kita dapat menghi ndari adanya duplikasi proses yang kurang l ebi h sama, sehi ngga pemeli haraannya juga jadi lebi h mudah.c) Meningkatkan keamanan database. Dengan adanya SP, database akan lebih aman karena aplikasi yang mem anggil SP tidak perlu mengetahui isi di dalamnya. Sebagai contoh, dal am proses menambahkan data (insert), kita membuat suatu SP khusus. Dengan demikian, saat client atau aplikasi akan menam bahkan data (insert) m aka tidak perl u tahu nam a tabel nya, karena hanya cuk up mem anggil SP tersebut dengan mengi rimkan parameter yang diingi nkan.Selanjutnya, Stored Procedure dari segi bentuk dan sifatnya terbagi menjadi 2 (dua), yaitu FUNCTION dan PROCEDURE.Perbedaan ut ama antara function dan procedure adalah terletak pada nilai yang dikembalikanny a (di-return).Function memiliki suat u nilai yang dikembalikan (di-return), sedangkan procedure tidak.Umumnya suatu procedure hanya berisi suatu kumpulan proses yang tidak menghasil nya val ue, biasanya hanya menampilkan saja. Sebagai catatan bahwa dalam modul ini jika terdapat istilah SP (Stored Procedure)maka yang dim ak sud adalah Function dan Procedure.Hello World!Sebagai contoh sederhana, kita akan membuat suatu SP yang akan menampilkan string Hello World! di layar hasil. Berikut ini perintah query untuk membuat SP tersebut:DELIMITER $$CREATE PROCE DURE hello()BEGINSELECT "Hello World!";END$$DELIMITER ;Untuk memanggil procedure tersebut, gunakanlah CALL. Berikut ini contoh pem anggilan procedure dan hasil tampilannya:CALL hello();Hasilnya sebagai berikut:+--------------+| Hello World! |+--------------+| Hello World! |+--------------+

Membuat procedure baru dengan nama hello yang ketika dijalankan akan menampilkan kalimat HELLO.. belajar trigger SBD II dan menampilkan struktur procedure yang terdapat dalam database aktif saat ini. Ditampilkan satu procedure dengan nama hello.

Menampilkan daftar procedure dan statusnya dengan sintaks show procedure status, saat ini hanya ada satu procedure yaitu hello. Selanjutnya memanggil procedure hello yang kemudian akan menampilkan hasilnya.

Membuat procedure baru dengan nama jmlMhs yang ketika dijalankan akan menampilkan jumlah mahasiswa seluruhnya yang terdapat di table mhs

Menampilkan semua procedure yang terdapat dalam database aktif. Dengan penambahan procedure sebelumnya yaitu jml_mhs, maka show procedure status menghasilkan 2 records. Selanjutnya menjalankan procedure jml_mhs yang menampilkan jumlah mahasiswa yang ada

Membuat procedure baru dengan nama jml_matkul yang memiliki hasil keluaran berupa integer yang berisikan jumlah mata kuliah pada table matkul. Selanjutnya menampilkan semua procedure yang ada. Procedure baru jml_matkul berhasil ditambahkan.

Memanggil procedure jml_matkul dengan hasil keluaran yang disimpan pada variable @jumlahMK berupa integer. Setelah procedure dipanggil, untuk menampilkannya tinggal menggunakan perintah select.

5. Membuat, Mengubah dan Menghapus SPa) Membuat SPUntuk mem buat SP baru, berikut ini bentuk umum nya:CREATE[DEFINER = { user | CURRE NT_USER }]PROCEDURE sp_name([proc_parameter[,...]])[characteristic...] routine_body

CREATE[DEFINER = { user | CURRE NT_USER }]FUNCTION sp_name ([func_parameter[,...]])RETURNS type[characteristic ...] routine_body

Contoh 1. Procedure untuk menghitung jumlah pelangganDELIM ITE R $$CREATE PROCE DURE jumlahPelanggan()BEGINSELECT COUNT(*) FROM pelanggan;END$$DELIMITER ;Cara pemanggil an dari procedure diatas adalah dengan menggunakan CALL jumlahPelanggan(). Hasilnya akan ditampilkan jumlah record dari tablepelanggan.

Berikut ini bentuk lain dari contoh diatas:DELIMITER $$CREATE PROCEDURE jumlahPelanggan2(OUT ha sil AS INT)BEGINSELECT COUNT(*) INTO ha sil FROM pelanggan;END$$DELIMITER ;Pada bentuk procedure yang kedua di atas (jumlahPelanggan2), kita menyimpan hasil dari procedure ke dalam satu vari abel bernamaha sil yang bertipe INT. Perbedaan dari kedua bentuk di atas adalah, pada bentuk kedua, kita dapat memanggil procedure dengan SELECT, sedangkan padayang pertam a tidak bisa. Berikut ini contoh pemanggilan untuk procedure yang kedua:mysql> CALL jumlahPelanggan2(@jumlah);Query OK, 0 rows affected (0.00 sec)mysql> SELECT @jumlah AS `Jumlah Pelanggan`;+------------------+| Jumlah Pelanggan |+------------------+| 5 |+------------------+1 row in set (0.02 sec)

Contoh 2.Procedure untuk menghitung jumlahitem barang yang pernah dibeli oleh satu pelanggan.DELIM ITER $$CREATE PROCE DUREjumlahItemBarang (pelanggan VARCHA R(5))BEGINSELECT SUM (detil_pesan.jumlah)FROM pesan, detil_pesanWHERE pesan.id_pesan=detil_pesan.id_pesanAND pesan.id_pelanggan=pelanggan;END$$DELIM ITER ;

Contoh 3. Function untuk menghitung juml ah produk yang tersedia (stock) untuk satu produk tertentu.DELIM ITER $$CREATE FUNCTION jumlahS tockBarang(produk VARCHAR(5))RETURNS INTBEGINDECLARE jumlah INT;SELECT COUNT(*) INTO jumlah FROM produkWHERE id_produk=produk;RETURN jumlah;END$$DELIMITER ;Untuk memanggil suatu function, kita tidak menggunak an CALL, tetapi langsung dapat memanggil dengan SELECT. Berikut ini contoh pemanggilan untuk fungsi di atas.SELECT jumlahStockBarang('B0001');Dan berikut ini hasilnya:+----------------------------+| jumlahStockBarang('B0001') |+----------------------------+| 1 |+----------------------------+

b) Mengubah SPUntuk mengubah SP yang sudah ada, berikut ini bentuk um umnya:ALTER {PROCEDURE | FUNCTION} sp_nam e[characteristic ...]

Membuat procedure baru dengan nama jml_ambil_sks yang berfungsi untuk menghitung berapa jumlah SKS yang diambil oleh seorang mahasiswa. Procedure ini berjalan dengan parameter masukan mNim berupa varchar. Variable xnim tersebut selanjutnya digunakan sebagai kata kunci dalam melakukan pencarian data, dalam contoh ini adalah jumlah total SKS. Selanjutnya menampilkan semua procedure yang ada. Procedure jml_ambil_sks berhasil ditambahkan

Memanggil procedure jml_ambil_sks untuk menghitung jumlah SKS yang diambil oleh mahasiswa dengan nim 001, Memanggil procedure jml_ambil_sks untuk menghitung jumlah SKS yang diambil oleh mahasiswa dengan nim 003, memanggil procedure jml_ambil_sks untuk menghitung jumlah SKS yang diambil oleh mahasiswa dengan nim 005.

Membuat function baru bernama func_jml_ambil_matkul dengan parameter masukan xNim. Fungsi ini nantinya akan menghitung berapa jumlah mata kuliah yang diambil oleh seorang mahasiswa.

Menggunakan function func_jml_ambil_matkul untuk menghitung berapa mata kuliah yang diambil oleh mahasiswa dengan nim 001. Selanjutnya penggunaan function dapat dimanfaatkan untuk melihat beberapa data sekaligus.

c) Menghapus SPUntuk menghapus SP yang sudah ada, berikut ini bentuk umum nya:DROP {PROCEDURE | FUNCTION} [IF E XIS TS] sp_nameSintaks Dasar dalam SP

SP dapat dikatakan sebagai bahasa pemrogramanyang berada di dalam database.Oleh karena itu, tentunya terdapat sintaks-sintaks tert entu berhubungan dengan SP tersebut, misal nya bagaimana untuk mendeklarasikan variabel, penyel eksian kondisi, perulangan dsb. Pada bagian ini akan diuraikan beberapa sintaks dasar SP yang didukung oleh MySQL.

Untuk menghapus sebuah procedure digunakan perintah drop procedure

6. VariabelVariabel digunakan untuk menyimpan suatu nilai secara temporer (sementara) di memory. Variabel akan hil ang saat sudah tidak digunakan lagi. Variabel dalam MySQL sebelum dapat di gunakan, pertama kali harus dideklarasikan terl ebihdahulu. Berikut ini bentuk umum pendeklarasi an suatuvariabel di MySQL:DECLARE variable_nam e DATATYPE [DEFAULT value];

Contohnya:

DECLARE jumlah INT;DECLARE kode VARCHAR(5);DECLARE tgl_lahir DATE DEFAULT 1982-10-20;

Setelah dideklarasikan, suatu variabel dapat diisi dengan suatu nilai sesuai dengan tipe data yang didefinisikan saat pendeklarasian.Untuk mengisikan nilai ke dalam suatu variabel, digunakan perintah SET. Format umumnya sebagai berikut:SET vari able_name = expression|val ue;

Contohnya:SETjumlah = 10;SET kode = (SELECT id_pelanggan FROM pelanggan LIMIT 1);SET tgl_lahir = now();Berikut ini contoh function hitungUmur() unt uk menghitung umur seseorang saat ini berdasarkan tahun kel ahiran yang diberikan.DELIM ITER $$CREATE FUNCTION hitungUmur (lahir DATE )RETURNS INTBEGINDECLARE thn_sekarang, thn_l ahir INT;SET thn_sekarang = YEAR(now());SET thn_lahir = YEAR (lahir);RETURN thn_sekarang -thn_lahir;END$$DELIMITER;

Menampilkan function yang ada, dalam contoh ini ada 1 fungsi yaitu func_jml_ambil_matkul. Kemudia membuat fungsi baru bernama func_umur untuk menghitung umur berdasarkan masukan berupa tanggal lahir.

Menggunakan fungsi func_umur dengan berurutan untuk menghitung umur berdasarkan tanggal lahir untuk Dedi, Deni, dan Doni

7. Penyeleksian KondisiDengan adanya fasilitas penyeleksian kondisi, kitadapat mengatur al ur proses yang terj adi dalam database kita. Di MySQL, penyeleksian kondisi terdiri dari IF, IF...ELSE dan CASE. Berikut ini bentuk umum ketiga peri ntah tersebut:IF kondisi THENperi ntah-jika-benar;END IF;IF kondisi THENperintah-jika-benar;ELSEperi ntah-jika-salah;END IF;CASE expressionWHEN value THENstatements[WHEN value THENstatements...][ELSEstatements]END CASE;

Berikut ini contoh penggunaan perintah IF dalam fungsi cekPelanggan() dimana fungsi ini memeriksa apakah pelanggan sudah pernah mel akukan t rans aksi pemesanan barang. Jika sudah pernah, tampilkan pesan berapa kali mel akukan pemesanan, jika belum tampilkan pesan belum pernah memesan.DELIMITER $$CREATE FUNCTION cekPelanggan (pelanggan varchar(5))RETURNS VARCHAR (100)BEGINDECLARE jumlah INT;SELECT COUNT(id_pesan) INTO jumlah FROM pesanWHERE id_pelanggan=pelanggan;IF (jumlah > 0) THENRETURN CONCAT("Anda sudah bertransak si sebanyak ",jumlah, " kali");ELSERETURN "Anda belum pernah melakukan transaksi";END IF;

END$$DELIMITER ;

Dan berikut ini contoh penggunaan perintah CASE dalam fungsi getDiskon() dimana fungsi ini menentukan diskon berdasarkan jumlah pesanan yang dilakukan. DELIMITER $$ CREATE FUNCTION getDiskon(jumlah INT) RETURNS int(11) BEGIN DECLARE diskon INT; CASE WHEN (jumlah >= 100) THEN SET diskon = 10; WHEN (jumlah >= 50 AND jumlah < 100) THEN SET diskon = 5; WHEN (jumlah >= 20 AND jumlah < 50) THEN SET diskon = 3; ELSE SET diskon = 0; END CASE; RETURN diskon; END$$ DELIMITER ;

Membuat fungsi baru lagi bernama func_cek_presensi dengan parameter masukan xNim. Fungsi ini digunakan untuk menghitung berapa kali seorang mahasiswa tidak masuk kuliah. Jika jumlah tidak masuk lebih dari nol maka fungsi ini akan mengembalikan teksAnda sudah tidak masuk kuliah sebanyak [jml] kalisedangkan jika jumlah tidak masuk adalah nol maka mengembalikan teks Anda termasuk mahasiswa rajin masuk kuliah !!

Menggunakan fungsi func_cek_presensi untuk mahasiswa dengan nim 001. Dan menggunakan fungsi func_cek_presensi bersamaan untuk mahasiswa dengan nim 002, 004 dan 005 yang ditampilkan berjajar.

Membuat fungsi baru dengan nama f_nilaiAbjad untuk mengkonversi nilai angka berskala 0-100 ke dalam abjad berdasarkan kondisi yang ditentukan, yaitu:Nilai AngkaNilai Huruf90 100A85 89AB80 84B75 79BC70 74C65 69CD60 64DLainnyaE

Menggunakan fungsi f_nilaiAbjad secara berurutan untuk mengkonversi nilai 83, 74, 72 dan 70 menjadi nilai huruf yang ditampilkan berjajar

8. Perulangan Selain penyeleksian kondisi, MySQL juga mendukung adanya perulangan dalam querynya. Perulangan biasanya digunakan untuk mengulang proses atau perintah yang sama. Dengan perulangan, perintah akan lebih efisien dan singkat. Berikut ini bentuk -bentuk perintah perulangan: [label:] LOOP statementsEND LOOP [label];

[label:] REPEAT statementsUNTIL expression END REPEAT [label]

[label:] WHILE expression DO statementsEND WHILE [label]

Contoh perulangan dengan LOOP SET i=1; ulang: WHILE i