Anda di halaman 1dari 8

CREATE TABLE [customer] (

[kodeCust] [char] (10) COLLATE Latin1_General_CI_AS NULL ,


[nama] [varchar] (30) COLLATE Latin1_General_CI_AS NULL ,
[alamat] [varchar] (40) COLLATE Latin1_General_CI_AS NULL ,
[status] [char] (1) COLLATE Latin1_General_CI_AS NULL
) ON [PRIMARY]
GO

CREATE TABLE [transaksi] (


[tgl] [smalldatetime] NULL ,
[kodeCust] [char] (5) COLLATE Latin1_General_CI_AS NULL ,
[kode_brg] [char] (5) COLLATE Latin1_General_CI_AS NULL ,
[harga] [money] NULL ,
[jumlah] [int] NULL ,
[diskon] [int] NULL
) ON [PRIMARY]
GO
Procedure

CREATE PROCEDURE sp_LihatMhs


AS
SELECT *
FROM Mahasiswa

Exec sp_LihatDosen

CREATE PROCEDURE SP_INSERT_MHS


(
@NBI CHAR(9), @NAMA VARCHAR(30),
@ALAMAT VARCHAR(40), @WALI CHAR(5)
)

AS

INSERT INTO MAHASISWA ( NBI , NAMA , ALAMAT, WALI)


VALUES (@NBI, @NAMA, @ALAMAT, @WALI)

EXEC SP_INSERT_MHS ‘469060911’, ‘Luna Maya’, ‘RSJ Porong’,’46008’

CREATE PROCEDURE SP_UBAH_MHS


(
@NBI CHAR(9), @NAMA VARCHAR(30),
@ALAMAT VARCHAR(40)
)
AS

UPDATE MAHASISWA
SET NAMA=@NAMA, ALAMAT = @ALAMAT
WHERE NBI = @NBI

EXEC SP_UBAH_MHS ‘469060911’, ‘Cut Tari’, ‘RSJ Menur’


CREATE PROCEDURE SP_HAPUS_MHS
(
@NBI CHAR(9)
)
AS

DELETE FROM MAHASISWA


WHERE NBI = @NBI

EXEC SP_HAPUS_MHS ‘469060911’

TRIGGER

REAKSI ATAS AKSI PADA SUATU TABEL (INSERT, UPDATE, DELETE)

CREATE TRIGGER TR_HapusMHS ON [dbo].[MAHASISWA]


FOR DELETE
AS

--INSERT INTO LOG_MHS (NBI, NAMA,ALAMAT, WALI)


--SELECT NBI, NAMA,ALAMAT, WALI
--FROM DELETED

DECLARE @NBI CHAR(9), @NAMA VARCHAR(30),


@ALAMAT VARCHAR(40), @WALI CHAR(5)

SET @NBI = (SELECT NBI FROM DELETED)


SET @NAMA = (SELECT NAMA FROM DELETED)
SET @ALAMAT = (SELECT ALAMAT FROM DELETED)
SET @WALI = (SELECT WALI FROM DELETED)

EXEC SP_INSERT_MHS @NBI, @NAMA, @ALAMAT, @WALI


FUNGSI

Seperti prosedur, namun mengembalikan suatu nilai


(ingat prosedur tidak mengembalikan nilai!!!)

CREATE FUNCTION FU_HitungDiskon


(
@kodeCust char(5), @jml int, @harga int
)
RETURNS REAL
AS
BEGIN
declare @diskon real
declare @statusCust char

set @statusCust = (select status from customer where kodeCust = @kodeCust)


if @statusCust = 'P'
set @diskon = @jml * @harga * 0.1
else
set @diskon = 0
return @diskon

END

SELECT DBO.FU_HITUNGDISKON ('bbbbb',5,200)

CREATE PROCEDURE SP_INSERT_TRANSAKSI


(
@TGL SMALLDATETIME, @KODECUST CHAR(5),
@KODEBRG CHAR(5), @JML INT, @HARGA MONEY
)

AS

DECLARE @DISKON REAL


SET @DISKON = (SELECT DBO.FU_HITUNGDISKON (@KodeCust,@JML,
@Harga))

INSERT INTO TRANSAKSI


(TGL, KodeCust, KodeBrg, Jumlah, Harga, diskon)
values
(@TGL, @KodeCust, @KodeBrg, @Jml, @Harga, @Diskon)
GO
SELECT DBO.FU_HITUNGDISKON ('AAAAA',5,200)

SELECT DBO.FU_HITUNGDISKON ('BBBBB',5,200)

exec SP_INSERT_TRANSAKSI
'01/05/2009','AAAAA','CLN01', 5,200

exec SP_INSERT_TRANSAKSI
'01/05/2009','BBBBB','CLN01', 5,200

SELECT * FROM TRANSAKSI


TRANSAKSI

Terdiri dari COMMIT dan ROLLBACK


COMMIT = menyetujui seluruh isi pada transaksi
Rollback = tidak setuju dan dikembalikan ke posisi awal sebelum transaksi.

-- Contoh transaksi ke-1


BEGIN TRANSACTION opr1

UPDATE dosen
SET nama_dsn = 'juki'
WHERE kode_dsn = '46006'

COMMIT TRANSACTION opr1

SELECT * FROM DOSEN

-- Contoh transaksi ke-2


BEGIN TRANSACTION opr1

UPDATE dosen
SET nama_dsn = 'juki'
WHERE kode_dsn LIKE '46006'

SELECT @@ROWCOUNT as JmlBaris

COMMIT TRANSACTION opr1

SELECT * FROM DOSEN

-- @@ROWCOUNT berfungsi untuk mengetahui jumlah baris yang di update pada


tabel tsb.
-- Contoh transaksi ke-3
BEGIN TRANSACTION opr1

UPDATE dosen
SET nama_dsn = 'juki'
WHERE kode_dsn = '46006'

IF @@ROWCOUNT = 1
COMMIT TRANSACTION opr1
ELSE
ROLLBACK TRANSACTION opr1

SELECT * FROM DOSEN

-- Contoh transaksi ke-4

BEGIN TRANSACTION opr1

UPDATE dosen
SET nama_dsn = 'juki'
WHERE kode_dsn LIKE '46006'

update mahasiswa
set nama= 'dora'
where nbi = '469900012'

COMMIT TRANSACTION opr1

SELECT * FROM DOSEN


SELECT * FROM MAHASISWA

-- Contoh transaksi ke-5


DECLARE @JmlBaris TINYINT
Set @JmlBaris = 0

BEGIN TRANSACTION opr1

UPDATE dosen
SET nama_dsn = 'juki'
WHERE kode_dsn LIKE '46006'

Set @JmlBaris = @@RowCount


update mahasiswa
set nama= 'dora'
where nbi = '469900012'

Set @JmlBaris = @JmlBaris + @@RowCount


select @jmlBaris

if @jmlBaris = 2
COMMIT TRANSACTION opr1
else
rollback transaction opr1

SELECT * FROM DOSEN


SELECT * FROM MAHASISWA

-- Nama Transaksi berupa variable


-- Contoh transaksi ke-6
DECLARE @namaTrans VARCHAR(20)
SELECT @namaTrans = 'transaksiKu'

BEGIN TRANSACTION @namaTrans

UPDATE dosen
SET nama_dsn = 'Ali'
WHERE kode_dsn LIKE '46006'

COMMIT TRANSACTION @namaTrans

Anda mungkin juga menyukai