contoh soal SQL.
1. Setiap kali film dikembalikan (pada saat melakukan proses update pada column TglKembali), SQL Server harus mengembalikan nilai dari column StatusPinjam menjadi ‘T’
jawaban:
create trigger ubah_nilai
on trpinjam
for update
as
select * from inserted --pilih record dari tbl Inserted (tbl sementara yg menampung nilai baru)
update msvcd --update tbl msvcd
set statuspinjam = 'T' --isi field statuspinjam dgn nilai 'T'
from Inserted --nilai diambil dari tabel inserted (tabel yg menampung nilai baru)
where msvcd.kdvcd = inserted.kdvcd --dgn kondisi
--<>
select * from trpinjam
go
select * from msvcd
go
update trpinjam
set tglkembali = '2008-01-11'
where kdtransaksi = 'tr008'
go
on trpinjam
for update
as
select * from inserted --pilih record dari tbl Inserted (tbl sementara yg menampung nilai baru)
update msvcd --update tbl msvcd
set statuspinjam = 'T' --isi field statuspinjam dgn nilai 'T'
from Inserted --nilai diambil dari tabel inserted (tabel yg menampung nilai baru)
where msvcd.kdvcd = inserted.kdvcd --dgn kondisi
--<>
select * from trpinjam
go
select * from msvcd
go
update trpinjam
set tglkembali = '2008-01-11'
where kdtransaksi = 'tr008'
go
Jawaban:
create trigger cek_denda --buat trigger
on trpinjam --di tabel trpinjam
for update --untuk update
as
declare @hari int --deklarasikan variabel @hari
select @hari = cast(tglkembali - tglpinjam as int) --isi @hari dgn selisih dari tglkembali dgn tglpinjam.
--cast dipergunakan utk konversi nilai date menjadi nilai int
from inserted --data diambil dari tabel inserted (tbl sementara)
where kdtransaksi = inserted.kdtransaksi --dgn kondisi kode = kode dari tabel inserted
if @hari > 6 --jika nilai @hari > dari 6
begin
set @hari = @hari - 6 --isi @hari dgn (@hari - 6)
print 'Anda terlambat mengembalikan'
update trpinjam --update tabel trpinjam
set denda = (@hari * 500) --isi field denda dgn @hari * 500
from Inserted --data diambil dari tabel inserted (tbl sementara)
where trpinjam.kdtransaksi = inserted.kdtransaksi --dgn kondisi/syarat
end
--<>
select * from trpinjam
go
update trpinjam
set tglkembali = '2008-01-11'
where kdtransaksi = 'tr008'
go
on trpinjam --di tabel trpinjam
for update --untuk update
as
declare @hari int --deklarasikan variabel @hari
select @hari = cast(tglkembali - tglpinjam as int) --isi @hari dgn selisih dari tglkembali dgn tglpinjam.
--cast dipergunakan utk konversi nilai date menjadi nilai int
from inserted --data diambil dari tabel inserted (tbl sementara)
where kdtransaksi = inserted.kdtransaksi --dgn kondisi kode = kode dari tabel inserted
if @hari > 6 --jika nilai @hari > dari 6
begin
set @hari = @hari - 6 --isi @hari dgn (@hari - 6)
print 'Anda terlambat mengembalikan'
update trpinjam --update tabel trpinjam
set denda = (@hari * 500) --isi field denda dgn @hari * 500
from Inserted --data diambil dari tabel inserted (tbl sementara)
where trpinjam.kdtransaksi = inserted.kdtransaksi --dgn kondisi/syarat
end
--<>
select * from trpinjam
go
update trpinjam
set tglkembali = '2008-01-11'
where kdtransaksi = 'tr008'
go
3. pada saat data transaksi ingin di hapus, maka SQL Server harus mengecek apakah film yang dipinjam sudah dikembalikan apa belum. Jika film belum dikembalikan, SQL Server harus menolak penghapusan tersebut.
Jawaban:
create trigger cek_hapus --BUAT TRIGGER
on trpinjam --DI TABEL TRPINJAM
for delete --UNTUK OPERASI DELETE
as
declare @status char(1) --DEKLARASI NILAI @STATUS UTK MENYIMPAN NILAI STATUS
select @status = msvcd.statuspinjam from msvcd, deleted --isi @status dgn nilai statuspinjam dari tbl msvcd
where msvcd.kdvcd = deleted.kdvcd --dgn kondisi msvcd.kdvcd=deleted.kdvcd
if @status = 'T' --jika @status = 'T'
begin
delete trpinjam from trpinjam, deleted --hapus data di TRPINJAM
where trpinjam.kdtransaksi = deleted.kdtransaksi--dgn kondisi kdtransaksi yg sama dari tbl trpinjam dan tbl deleted
end
else
begin
print 'Film belum dikembalikan, tidak bisa melakukan penghapusan data !!'
rollback --perintah pembatalan operasi
end
--<>
select * from trpinjam
go
select * from msvcd
go
delete trpinjam where kdtransaksi = 'tr009'
on trpinjam --DI TABEL TRPINJAM
for delete --UNTUK OPERASI DELETE
as
declare @status char(1) --DEKLARASI NILAI @STATUS UTK MENYIMPAN NILAI STATUS
select @status = msvcd.statuspinjam from msvcd, deleted --isi @status dgn nilai statuspinjam dari tbl msvcd
where msvcd.kdvcd = deleted.kdvcd --dgn kondisi msvcd.kdvcd=deleted.kdvcd
if @status = 'T' --jika @status = 'T'
begin
delete trpinjam from trpinjam, deleted --hapus data di TRPINJAM
where trpinjam.kdtransaksi = deleted.kdtransaksi--dgn kondisi kdtransaksi yg sama dari tbl trpinjam dan tbl deleted
end
else
begin
print 'Film belum dikembalikan, tidak bisa melakukan penghapusan data !!'
rollback --perintah pembatalan operasi
end
--<>
select * from trpinjam
go
select * from msvcd
go
delete trpinjam where kdtransaksi = 'tr009'


