Transact-SQL (Trigger- Event, Store Procedure) By: U. Website : http://www.abdrohim.com mailto : Transact-SQL 1 Transact-SQL 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 Transact-SQL 2 1
Operator Assigment q SET @local_variable q SELECT @local variable Operator Aritmetika q +, -, *, /, % Logical Operator q AND, OR, NOT Comparison Operator q =,!=, >, <, >=, <= Comment q --, /*...*/ Transact-SQL 3 Deklarasi variabel Declare q Dapat dituliskan disembarang tempat q Seluruh tipe data di SQL server dpata digunakan termasuk tipe CURSOR q Variabel yang didekalarasikan tanpa diberikan nilai default akan diberikan nilai NULL q Setiap variabel yang aan digunakan harusdi deklarasikan dahulu q Setiap nama variabel diawali dengan @ Contoh: q q DECLARE @find varchar(30) DECLARE @pub_id char(4), @hire_date datetime Transact-SQL 4 2
Type Variable numeric q Bigint, int,smallint, tinyint, bit, decimal, numeric, money, smallmoney, float, real. Date q Datetime, smalldatetime String q char, varchar, text, nchar, nvarchar, ntext cursor sql_variant table timestamp uniqueidentifier Transact-SQL 5 Variabel Global & Output Variable Global = System Function Telah menjadi keyword tidak boleh digunakan lagi untuk deklarasi variabel Ditandai dengan @@didepan namavariabel global Contoh q @@connections, @@servername, @@version Output q Perintah yang digunakan Print seperti dalam bahasa C q Contoh print 'Koneksi aktif :'+ cast( @@connections as varchar(10) ) print 'Bahasa :'+ @@language print 'Maksimum Koneksi varchar(5) ) :'+ cast( @@max_connections as print 'Nama Server :'+ @@servername print 'Versi SQL Srver :'+ @@version Transact-SQL 6 3
Pencabangan 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 Transact-SQL 7 ContohIF 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.' Transact-SQL 8 4
Pengulangan 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 Transact-SQL 9 ContohWhile 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' Transact-SQL 10 5
Trigger-Event Digunakan untuk Business Rule & Integrity Merupakan bagian dari store procedure yang dapat meng-execute secara otomatis ketika terjadimodifikasi/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 padatabel lain di luar database aktif Transact-SQL 11 StrukturPenulisanTrigger 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 ] } } Transact-SQL 12 6
SQL Statement Aksi-aksi yang dijalankan dalam trigger Aksi ditulis dengan menggunakan Transact- SQL statements Keyword tambahan : Inserted, deleted untuk rable atau untuk column Transact-SQL 13 ContohTrigger-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) end select @kdper = pk_kode from inserted select @JmlDebet = jd_debet from inserted select @JmlKredit = jd_kredit from inserted if @JmlDebet > 0 SET pk_mutasi_debet = pk_mutasi_debet + @JmlDebet else SET pk_mutasi_kredit = pk_mutasi_kredit + @JmlKredit return Transact-SQL 14 7
ContohTrigger-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 --Kurangi mutasi dengan jurnal yang lama if @JmlDebet > 0 SET pk_mutasi_debet = pk_mutasi_debet -@OldDebet WHERE pk_kode = @Oldkd else SET pk_mutasi_kredit = pk_mutasi_kredit -@OldKredit WHERE pk_kode = @Oldkd --update mutasi dengan jurnal yang baru if @JmlDebet > 0 SET pk_mutasi_debet = pk_mutasi_debet + @JmlDebet else SET pk_mutasi_kredit = pk_mutasi_kredit + @JmlKredit return end Transact-SQL 15 ContohTrigger-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 SET pk_mutasi_debet = pk_mutasi_debet -@JmlDebet else SET pk_mutasi_kredit = pk_mutasi_kredit -@JmlKredit return end Transact-SQL 16 8