Transact-SQL (TriggerEvent, Store Procedure) By: U. Abd. Rohim Website : http://www.abdrohim.com mailto :
[email protected]
Transact-SQL
1
Transact-SQL n
n n n
n
Merupakan sentral dari Microsaft SQL Server untuk melakukan komunikasi & interfacing seluruh aplikasi di dalamnya dalam manajemen database Menggunakan bahasa SQL Untuk user database dapat digunakun untuk mendefiniskan business logic Transact-SQL dapat dipanggil dalam tools bahasa pemrograman sepert VB, Delphi, C++ Transact-SQL = SQL + Code Program
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
2
1
Operator n
Assigment q q
n
Operator Aritmetika q
n
AND, OR, NOT
Comparison Operator q
n
+, -, *, /, %
Logical Operator q
n
SET @local_variable SELECT @local variable
=, !=, >, <, >=, <=
Comment q
--, /*...*/
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
3
Deklarasi variabel n
Declare q q
q
q
q
n
Dapat dituliskan disembarang “tempat” Seluruh tipe data di SQL server dpata digunakan termasuk tipe CURSOR Variabel yang didekalarasikan tanpa diberikan nilai default akan diberikan nilai NULL Setiap variabel yang aan digunakan harus di deklarasikan dahulu Setiap nama variabel diawali dengan @
Contoh: q q
DECLARE @find varchar(30) DECLARE @pub_id char(4), @hire_date datetime
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
4
2
Type Variable n
numeric q
n
Date q
n
n n n n
Datetime, smalldatetime
String q
n
Bigint, int,smallint, tinyint, bit, decimal, numeric, money, smallmoney, float, real.
char, varchar, text, nchar, nvarchar, ntext
cursor sql_variant table timestamp uniqueidentifier
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
5
Variabel Global & Output n n n n
n
Variable Global = System Function Telah menjadi keyword tidak boleh digunakan lagi untuk deklarasi variabel Ditandai dengan @@didepan nama variabel global Contoh q @@connections, @@servername, @@version Output q Perintah yang digunakan Print seperti dalam bahasa C q Contoh print 'Koneksi aktif print 'Bahasa print 'Maksimum Koneksi varchar(5) ) print 'Nama Server print 'Versi SQL Srver
Abd. Rohim
[email protected]
:'+ cast( @@connections as varchar(10) ) :'+ @@language :'+ cast( @@max_connections as :'+ @@servername :'+ @@version
VB Lanjut & SQL Server Transact-SQL
6
3
Pencabangan n
Struktur Penulisan IF Condition_Boolean_expression { sql_statement | statement_block } [ ELSE { sql_statement | statement_block } ] Keterangan: { } = Blok, jika statement-nya hanya satu maka tidak perlu menggunakan blok, tetapi jika lebih dari satu statement maka diperlukan blok Blok = diawali dengan BEGIN dan diakhiri dengan END
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
7
Contoh IF IF (SELECT AVG(price) FROM titles WHERE type = 'mod_cook') < $15 BEGIN PRINT 'The following titles are excellent mod_cook books:' PRINT ' ' SELECT SUBSTRING(title, 1, 35) AS Title FROM titles WHERE type = 'mod_cook' END ELSE PRINT 'Average title price is more than $15.'
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
8
4
Pengulangan n
Struktur Penulisan
WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ]
Keterangan: { } = Blok, jika statement-nya hanya satu maka tidak perlu menggunakan blok, tetapi jika lebih dari satu statement maka diperlukan blok Blok = diawali dengan BEGIN dan diakhiri dengan END
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
9
Contoh While WHILE (SELECT AVG(price) FROM titles) < $30 BEGIN UPDATE titles SET price = price * 2 SELECT MAX(price) FROM titles IF (SELECT MAX(price) FROM titles) > $50 BREAK ELSE CONTINUE END PRINT 'Too much for the market to bear' Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
10
5
Trigger-Event n n
n
n
Digunakan untuk Business Rule & Integrity Merupakan bagian dari store procedure yang dapat meng-execute secara otomatis ketika terjadi modifikasi/perubahan data pada suatu table Terjadi modifikasi/perubahan pada tabel yang dimaksud adalah untuk INSERT, UPDATE, DELETE Trigger pada suatu tabel tidak dapat me-refer pada tabel lain di luar database aktif
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
11
Struktur Penulisan Trigger CREATE TRIGGER trigger_name ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ]| IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } } Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
12
6
SQL Statement n n
n
Aksi-aksi yang dijalankan dalam trigger Aksi ditulis dengan menggunakan TransactSQL statements Keyword tambahan : Inserted, deleted untuk rable atau untuk column
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
13
Contoh Trigger-Event (1) CREATE TRIGGER tI_jr_detil ON t_jurnal_detil FOR INSERT AS begin declare @kdPer char(10) declare @JmlDebet numeric(11) declare @JmlKredit numeric(11) select @kdPer = pk_kode from inserted select @JmlDebet = jd_debet from inserted select @JmlKredit = jd_kredit from inserted if @JmlDebet > 0 UPDATE t_perkiraan SET pk_mutasi_debet = pk_mutasi_debet + @JmlDebet WHERE pk_kode = @kdPer else UPDATE t_perkiraan SET pk_mutasi_kredit = pk_mutasi_kredit + @JmlKredit WHERE pk_kode = @kdPer return end
Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
14
7
Contoh Trigger-Event (2) CREATE TRIGGER tU_jr_detil ON t_jurnal_detil FOR UPDATE AS begin declare @errno int, @errmsg varchar(255) declare @kdPer char(10) declare @Oldkd char(10) declare @JmlDebet numeric(11) declare @JmlKredit numeric(11) declare @OldDebet numeric(11) declare @OldKredit numeric(11) select @Oldkd = pk_kode from deleted select @OldDebet = jd_debet from deleted select @OldKredit = jd_kredit from deleted select @kdPer = pk_kode from inserted select @JmlDebet = jd_debet from inserted select @JmlKredit = jd_kredit from inserted
Abd. Rohim
[email protected]
--Kurangi mutasi dengan jurnal yang lama if @JmlDebet > 0 UPDATE t_perkiraan SET pk_mutasi_debet = pk_mutasi_debet - @OldDebet WHERE pk_kode = @Oldkd else UPDATE t_perkiraan SET pk_mutasi_kredit = pk_mutasi_kredit - @OldKredit WHERE pk_kode = @Oldkd --update mutasi dengan jurnal yang baru if @JmlDebet > 0 UPDATE t_perkiraan SET pk_mutasi_debet = pk_mutasi_debet + @JmlDebet WHERE pk_kode = @kdPer else UPDATE t_perkiraan SET pk_mutasi_kredit = pk_mutasi_kredit + @JmlKredit WHERE pk_kode = @kdPer return end VB Lanjut & SQL Server Transact-SQL
15
Contoh Trigger-Event (3) CREATE TRIGGER tD_jr_detil ON t_jurnal_detil FOR DELETE AS begin declare @errno int, @errmsg varchar(255) declare @kdPer char(10) declare @JmlDebet numeric(11) declare @JmlKredit numeric(11) select @kdPer = pk_kode from deleted select @JmlDebet = jd_debet from deleted select @JmlKredit = jd_kredit from deleted if @JmlDebet > 0 UPDATE t_perkiraan SET pk_mutasi_debet = pk_mutasi_debet - @JmlDebet WHERE pk_kode = @kdPer else UPDATE t_perkiraan SET pk_mutasi_kredit = pk_mutasi_kredit - @JmlKredit WHERE pk_kode = @kdPer return end Abd. Rohim
[email protected]
VB Lanjut & SQL Server Transact-SQL
16
8