Selasa, 20 September 2011

Pengertian Stored Prosedure,TRIGGER,FUNCTION

NIM / NAMA :10410100274/RICHARD

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 TEMPORARYmeja 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 REPLACEpernyataan. 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 INSERTmemicu 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 aliasOLD 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

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