Jumat, 22 Januari 2010

Trigger SQL Server

Pendahuluan

Salah satu keistimewaan dari SQL Server adalah mekanisme kontrol yang bernama database Trigger. Trigger sama seperti sekumpulan perintah Transact-SQL yang secara otomatis dijalankan apabila ada perintah INSERT, DELETE, atau UPDATE yang dijalankan di dalam tabel.
Aplikasi utama dari trigger adalah pembuatan metode validasi dan batasan akses ke dalam database, seperti misalnya perintah perintah keamanan. Ini merupakan cara lain selain dengan menggunakan aplikasi kita juga bisa melakukan kontrol langsung dengan menggunakan trigger yang diletakkan pada tabel yang bersangkutan.
Perintah yang dapat dilakukan Trigger adalah :
􀂃 Membuat isi dari kolom yang diambil dari kolom yang lain.
􀂃 Membuat mekanisme validasi yang mencakup query pada banyak tabel.
􀂃 Membuat log untuk mendaftarkan penggunaan tabel.
􀂃 Meng-update tabel tabel lain apabila ada penambahan atau perubahan lain di dalam tabel yang sedang aktif.

Komponen dari Trigger
Trigger dibentuk dari dua bagian :
􀂃 Perintah SQL untuk mengaktifkan trigger. Perintah INSERT, DELETE dan UPDATE bisa mengaktifkan trigger. Trigger yang sama bisa diaktifkan apabila ada lebih dari satu aksi yang terjadi. Dengan kata lain trigger bisa diaktifkan apabila ada perintah insert, delete atau update dijalankan.
􀂃 Aksi yang dijalankan oleh trigger. Trigger menjalankan blok PL/SQL.

Batasan Trigger
Dibawah ini adalah batasan dan pertimbangan di dalam menggunakan trigger :
􀂃 Trigger bisa menjalankan perintah yang terkandung di dalam badannya atau mengaktifkan prosedur dan trigger lain untuk menjalankan tugas tertentu.
􀂃 Setiap perintah SET bisa ditentukan di dalam trigger. Perintah ini akan tetap aktif selama ekseksi.
􀂃 Kita tidak bisa membuat trigger untuk view. Tetapi apabila view digunakan, trigger dari table dasar biasanya akan diaktifkan.
􀂃 Perintah Truncate Table tidak bisa dihentikan oleh trigger.
􀂃 Trigger tidak bisa menjalankan perintah Transact-SQL yang merupakan perintah DDL.

Membuat Trigger
Trigger bisa dibuat dengan 2 cara yaitu :
1. Menggunakan Query analizer
CREATE TRIGGER [TRIGGER NAME] ON [NAMA_TABEL]
FOR INSERT, UPDATE, DELETE
AS PERINTAH
Ket :
ON menunjukan tabel atau skema dimana trigger dibuat.
FOR harus diikuti oleh jenis perintah yang akan dijalankan.
AS memulai badan trigger dengan perintah yang akan dijalankan.

Berikut ini contoh pembuatan trigger semisalnya kita mempunyai tabel dengan nama tmhs dengan struktur sebagai berikut :


Gambar : Struktur Tabel TMhs

Buatlah tabel TMhs2 yang mempunyai struktur yang sama dengan TMhs.
Misalkan kita akan membuat trigger menampilkan tulisan saat program melakukan input
2. Menggunakan Enterprise Manager
Dengan menggunakan Enterprise manager pembuatan Trigger sangatlah mudah. Berikut ini cara membuat trigger menampilkan tulisan pada saat melakukan input :


Gambar : Menampilkan Trigger


Gambar : Menuliskan perintah Trigger

Tabel Inserted dan Deleted
Apabila tabel dijalankan SQL server akan membuat dua buah tabel sementara yang hanya muncul apabila trigger sedang dijalankan, tabel yang pertama adalah tabel inserted dan yang kedua adalah tabel deleted.
Apabila perintah INSERT atau UPDATE dijalankan, record yang dibuat atau diubah di copy ke dalam tabel inserted. Apabila perintah DELETE dijalankan, baris baris yang dihapus di copy ke dalam tabel deleted.

Contoh :

Gambar : Menampilkan data yang diedit

Membuat Replikasi Baris dengan Trigger
Dengan menggunakan tabel sementara dari trigger, kita bisa membuat sebuah mekanisme untuk melakukan replikasi cepat dari satu tabel ke tabel yang lainnya. Kita bisa menyisipkan, mengubah atau menghapus record pada tabel lain pada saat operasi sedang dilakukan pada tabel yang sedang aktif.
Berikut ini contoh membuat tiga buah trigger untuk replikasi atau menggandakan operasi dari tabel Tmhs ke dalam tabel Tmhs2.
Replikasi Insert
Nama trigger : insertrep
Create Trigger insertrep on tmhs
For insert
As
Insert into Tmhs2
Select * from inserted
Pada trigger ini, kita menggunakan Insert into dan select untuk mendapatkan field field dari tabel inserted
Replikasi Delete
Nama trigger : delrep
Create Trigger delrep on Tmhs
For Delete
As
Delete from tmhs2
Where tmhs2.nim in (select nim from deleted)
Kita menggunakan perintah Delete From dan Where untuk menyaring record yang akan dihapus dengan mencarinya pada tabel deleted, yang dalam hal ini hanya mengandung record yang baru saja dihapus
Replikasi Update
Nama trigger : uprep
Create Trigger uprep on Tmhs
For Update
As
Update Tmhs2
Set Nama=(Select Nama from Inserted),
Alamat=(Select Alamat from Inserted)
Where Tmhs2.nim in (Select nim from Inserted)
Trigger ini mereplikasi proses update yang telah dilakukan pada tmhs, didalamnya mengupdate colom nama dan alamat dari Tmhs2 dengan isi dari colom nama dan alamat dari tabel inserted. Klause Where juga digunakan untuk mengupdate record yang kodenya ditemukan pada tabel inserted saja.
Pada perintah replikasi update dan juga update biasa sangat dilarang untuk mengupdate primary key.

Tugas Sesi : Trigger SQL Server
Buatlah tabel barang dengan nama Tbarang1 dan Tbarang2 dengan struktur sebagai berikut :
1. Buatlah trigger insert dengan nama TrgInsertNIM untuk menampilkan tulisan ”Data Barang telah diinputkan”
2. Buatlah trigger update dengan nama TrgUpdateNIM untuk menampilkan tulisan ”Data Barang telah berhasil diubah”
3. Buatlah trigger delete dengan nama TrgDeleteNIM untuk menampilkan tulisan ”Data Barang telah berhasil dihapus”
4. Buatlah trigger untuk insert, update, delete dengan nama TrgGabunganNIM untuk menampilkan tulisan ”Data yang dioperasikan” kemudian dengan perintah inserted tampilkan data tersebut. Kemudian tampilkan semua data sesudah perintah query dijalankan.
5. Buatlah trigger untuk replikasi Insert dengan nama TrgRepinputNIM dari tabel Tbarang1 ke Tbarang2
6. Buatlah trigger untuk replikasi update dengan nama TrgRepeditNIM dari tabel Tbarang1 ke Tbarang2
7. Buatlah trigger untuk replikasi delete dengan nama TrgRephapusNIM dari tabel Tbarang1 ke Tbarang2
Ket : NIM adalah 2 huruf terakhir dari nim anda contoh jika nim anda 2008101035 maka NIM anda adalah 35 sehingga setiap nama trigger anda ditambahkan NIM tersebut.

Tidak ada komentar:

Posting Komentar