DOSEN :Tan Amelia
Pengertian
Stored Prosedure
Adalah program yang disimpan dalam data base seperti
halnya data. Hal ini sebenanya cukup tidak umum, karena kita mengharapkan yang disimpan
dlam data base adalah data bukan nya program.
Kemampuan utama SQL Server berada pada Store Procedure
dan Fungsi (Fungsi hanya terdapat pada SQL Server 2000)
Dengan adanya Store Procedure, maka program SQL yang
telah kita buat :
§ dapat digunakan kapanpun
§ lebih cepat dan efisien
karena bersifat Server Side
§ mudah dibuat dan dirawat karena kecil tapi
‘Power Full’
Dapat digunakan kapanpun
Seperti halnya pembuatan prosedur pada C++ / Pascal /
Java atau pemrograman yang lain, apabila pembuatan program bersifat modular
(dibuat kecil untuk setiap maksud/tujuan), akan lebih baik apabila pemrograman
tesebut menggunakan banyak prosedur. Dengan dibuat terpisah, kapanpun diinginkan, hanya
tinggal memanggil program tersebut.
Lebih cepat dan efisien
Untuk program yang besar, pembuatan program Server Side, terasa lebih mudah
dibandingkan Client Side. Dengan Server Side, program lebih bersifat Netral
terhadap semua aplikasi. Disisi Programer, ia tidak perlu mengetahui terlalu
mendalam terhadap suatu program aplikasi seperti VB, Delphi, Java , C++
Builder, PHP, ASP, J2ME, WAP, SMS dsb. karena tugas–tugas tersebut sebenarnya dapat
dilakukan oleh Server (dalam hal ini SQL Server) VB, Delphi, Java , C++ Builder
PHP, ASP, J2ME, WAP, SMS dsb tersebut hanyalah User interface/tampilan belaka,
yang hanya berfungsi untuk menampilkan data, memasukkan data, serta memberikan
parameter-parameter yang dibutuhkan oleh server untuk menghapus , mengubah,
skeduling, backup dan sebagainya. Sedangkan program yang sesungguhnya berada
pada Server tersebut.
CREATE TRIGGER
Sintaks
MENCIPTAKAN
[Pembuat definisi = { user | CURRENT_USER}]
TRIGGER trigger_name trigger_time trigger_event
TENTANG tbl_name UNTUK SETIAP ROW trigger_body
Pernyataan
ini membuat memicu baru. Pemicu
adalah objek database bernama yang berhubungan dengan tabel, dan yang
mengaktifkan ketika peristiwa tertentu terjadi untuk meja. Memicu menjadi terkait dengan
tabel bernamatbl_name , yang harus mengacu pada tabel
permanen. Anda
tidak dapat mengaitkan dengan memicu
TEMPORARY
meja atau melihat. CREATE TRIGGER
ditambahkan di MySQL 5.0.2.
Dalam
MySQL 5.0
CREATE TRIGGER
membutuhkan SUPER
hak istimewa.
Para
DEFINER
klausa menentukan konteks
keamanan yang akan digunakan saat memeriksa hak akses pada waktu aktivasi
memicu. Ini
ditambahkan di MySQL 5.0.17. Lihat
nanti dalam bagian ini untuk informasi lebih lanjut.
trigger_time adalah waktu pemicu. Hal ini dapat
BEFORE
atau AFTER
untuk menunjukkan yang memicu
mengaktifkan sebelum atau setelah setiap baris yang akan diubah.
trigger_event menunjukkan jenis pernyataan
yang mengaktifkan memicu. Para trigger_event bisa salah satu dari berikut
ini:
·
INSERT
: Trigger diaktifkan setiap kali baris
baru dimasukkan ke dalam tabel, misalnya, melalui INSERT
, LOAD DATA
, dan REPLACE
pernyataan.
·
UPDATE
: memicu diaktifkan setiap kali berturut-turut
dimodifikasi, misalnya, melalui UPDATE
pernyataan.
·
DELETE
: Trigger diaktifkan setiap kali baris
dihapus dari meja, misalnya, melalui DELETE
dan REPLACE
pernyataan. Namun, DROP TABLE
dan TRUNCATE TABLE
pernyataan di atas meja tidak mengaktifkan trigger ini, karena
mereka tidak menggunakan DELETE
. Lihat Bagian 12.1.21, " TRUNCATE TABLE
Sintaks " .
Hal
ini penting untuk memahami bahwa trigger_event tidak mewakili tipe literal
dari pernyataan SQL yang mengaktifkan memicu begitu banyak karena merupakan
jenis operasi tabel. Sebagai
contoh, sebuah
INSERT
memicu
diaktifkan dengan tidak hanya INSERT
laporan tetapi juga LOAD DATA
karena kedua pernyataan pernyataan
menyisipkan baris ke dalam tabel.
Sebuah
contoh yang berpotensi membingungkan dari hal ini adalah
INSERT INTO
... ON DUPLICATE KEY UPDATE ...
INSERT INTO ... ON DUPLICATE KEY UPDATE ...
sintaks: sebuah BEFORE INSERT
memicu akan mengaktifkan untuk
setiap baris, diikuti dengan baik sebagai AFTER INSERT
memicu atau kedua BEFORE UPDATE
dan AFTER UPDATE
memicu, tergantung pada apakah
ada kunci duplikat untuk baris.
Tidak
mungkin ada dua pemicu untuk tabel tertentu yang memicu tindakan yang sama dan
waktu acara. Misalnya,
Anda tidak bisa memiliki dua
BEFORE UPDATE
memicu untuk sebuah tabel. Tapi Anda dapat memiliki BEFORE UPDATE
dan BEFORE INSERT
pemicu, atau BEFORE UPDATE
dan AFTER UPDATE
memicu.
trigger_body adalah pernyataan untuk
mengeksekusi ketika mengaktifkan pemicu. Jika Anda ingin mengeksekusi
beberapa pernyataan, gunakan
BEGIN ... END
BEGIN ... END
pernyataan majemuk membangun. Hal ini juga memungkinkan Anda
untuk menggunakan pernyataan yang sama yang diperbolehkan dalam rutinitas
disimpan. Lihat Bagian
12.7.1, " BEGIN ... END
BEGIN ... END
Senyawa Pernyataan Sintaks " .Beberapa pernyataan tidak diizinkan dalam memicu, lihat Bagian E.1, "Pembatasan
Rutinitas Disimpan dan Pemicu" .
Anda
dapat merujuk ke kolom dalam tabel subjek (tabel yang terkait dengan pemicu)
dengan menggunakan alias
OLD
dan NEW
. OLD.
col_name mengacu pada kolom dari sebuah
baris yang sudah ada sebelum diperbarui atau dihapus. NEW.
col_name mengacu pada kolom sebuah baris
baru yang akan dimasukkan atau baris yang sudah ada setelah diperbarui.
MySQL
menyimpan
sql_mode
pengaturan sistem variabel yang
berlaku pada saat memicu dibuat, dan selalu melaksanakan memicu dengan
pengaturan ini berlaku, terlepas
dari mode SQL server saat ini.
Catatan
FUNCTION
FUNCTION adalah salah satu
feature yang terdapat di mysql 5.0 sedang-kan Function adalah
kumpulan-kumpulan SQL berupa rountine yang di simpan dalam database MySQL Server. biasanya function ini dikombinasikan denganstore pocedure atau bisa juga tidak di kombinasikan dengan store procedure
kumpulan-kumpulan SQL berupa rountine yang di simpan dalam database MySQL Server. biasanya function ini dikombinasikan denganstore pocedure atau bisa juga tidak di kombinasikan dengan store procedure
oke berikut ini cara membuat function
dalam contoh dibawah ini kasus tentang sistem informasi sekolah, yang mana function yang dibuat akan mengembalikan nilai berupa jumlah siswa dari setiap kelas.
sturuktur tabel siswa
CREATE TABLE `data_siswa`.`tbl_siswa` (
`nis` char(10) NOT NULL,
`nama` varchar(255) NOT NULL,
`kelas` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
function untuk mengembalikan jumlah data dari setiap kelas
DELIMITER $$
CREATE FUNCTION sf_tampil_siswa_kelas (p_kelas int) RETURNS INT DETERMINISTIC
BEGIN
DECLARE jml INT;
SELECT COUNT(*) AS jml_kelas INTO jml FROM tb_siswa WHERE kelas = p_kelas;
RETURN jml;
END$$
DELIMITER ;
penjelasannya sebagai berikut:
- DELIMITER = adalah
untuk memberi tahu kepada myql soal delimiter yang digunakan, secara
default menggunakan ; jadi bila
ada tanda ; mysql
akan mengartikan akhir dari statement, pada contoh di atas delimeter yang
digunakan $$ jadi akhir statementnya adalah $$
- CREATE FUNCTION = adalah header untuk membuat function
- RETURNS = adalah
untuk menentukan tipe data yang di return-kan oleh function
- DETERMINISTIC/ NOT DETERMINISTIC = adalah untuk menentukan yang bisa menggunakan function
ini adalah user pembuatnya saja (determinisric) atau user siapa saja (not determinisric).
- BEGIN END = adalah
body dari function jadi semua SQL nya di tulis disini.
contoh pemanggilannya seperiti dibawah ini:
select sf_tampil_siswa_kelas("2");
sebuah function hanya bisa memberikan return berupa nilai saja dan tidak bisa berupa resutlset
untuk penulisan DETEMINISTIC bisa ditulis secara implisit dengan memberikan setting global pada mysql dan secara default benilai NOT DETEMINISTIC , caranya dibawah ini:
SET GLOBAL log_bin_trust_function_creators = 1;
Tidak ada komentar:
Posting Komentar