TUGAS PBO - 1  

Posted by: rafie aza

Class Tape Compo
Memiliki Atribut :
  • Volume => 1 - 10
  • Tuning => 87.00 - 108.95
  • Spiker
  • Bass => 1 - 10
  • Treble => 1 - 10 
Memiliki method :
  • TapeDinyalakan( );
  • TapeDimatikan( );
  • VolumeDiperbesar( );
  • VolumeDiperkecil( );
Class Tape player
Memiliki Atribut :
  • Judul kaset =>
Memiliki Method :

  • TapeDinyalakan( );
  • TapeDimatikan( );
  • VolumeDiperbesar( );
  • VolumeDiperkecil( );
  • GantiCasette( );
Class Radio
Memiliki Atribut :
  • Frekuensi
  • Nama Frekuensi
Memiliki method :
  • TapeDinyalakan( );
  • TapeDimatikan( );
  • GantiFrekuensi( );
  • VolumeDiperbesar( );
  • VolumeDiperkecil( );
Class VCD/DVD player
Memiliki Atribut :
  • Kepingan CD
Memiliki Method :
  • TapeDinyalakan( );
  • TapeDimatikan( );
  • VolumeDiperbesar( );
  • VolumeDiperkecil( );
  • GantiKepingan( );
Class Button
Memiliki Atribut :
  • Play
  • Pause
  • next
  • previous
  • stop
  • record

Materi Stored Procedures, Functions dan Trigger pada SQL Server  

Posted by: rafie aza

NIM/NAMA : 10.41010.0280/Mochammad Ali Akbar Rafsanjani
Dosen : Tan Amelia
Tugas : Materi Stored Procedures, Functions dan Trigger pada SQL Server


PENGERTIAN STORED PROCEDURE

Pengertian Procedure
Procedure Adalah program yang disimpan dalam database seperti halnya data. Hal ini sebenanya cukup tidak umum, karena kita mengharapkan yang disimpan dalam database adalah data bukannya program.
A.Pembahasan tentang Stored Procedure :
1. Adanya dukungan Stored Procedure akan memban ke dalam stored procedure di SQL server, disimpan di server (misal dengan nama DoProsesStock). Pada program, cukup ditulis perintah SQL : Exec DoProsesStock StartDate, EndDate . Selanjutnya, SQL Server akan mengeksekusi perintah proses yang anda inginkan. satu kali perubahan proses, akan berlaku untuk semua user yang terhubung ke database, bahkan saat program masih berjalan di tiap komputer user (program tidak perlu dimatikan dulu).
2. Stored procedure akan menyederhanakan perintah SELECT * FROM table yang memang rumit, misal untuk laporan. Perintahnya dan algoritma nya sama dengan yang nomor 1. Bayangkan bila anda harus membuat perintah SELECT dari sebuah tabel, tapi juga diikuti kondisi2 tertentu yang biasanya berhubungan dengan data dari tabel lain.
3. Stored procedure akan membantu anda dalam membuat laporan yang sifatnya analisa data, yang biasanya memerlukan banyak sekali tabel2 pembantu.
Bagaimana bisa? Stored procedure, dapat membuat tabel temporary yang disimpan sementara di dalam memori server selama proses berlangsung, atau bisa juga selama program connect.
4. Stored procedure mengefisienkan proses, sehingga semua daya hanya akan dipusatkan di komputer server saja. Komputer client dapat berupa pentium 233 MMX, tapi dapat melakukan serangkaian proses yang rumit dan tetap tidak lambat. Karena bukan client yang berpikir, tetapi server yang melakukan pekerjaan, jadi client hanya akan mendapatkan data jadinya saja.
Pembuatan Stored Procedure :
anda dapat membuat stored procedure dengan program SQl Browser apa saja. bahkan cukup dengan sebuah TMemo, ADOConnection dan ADOQuery, anda sudah dapat membuat form untuk membuat stored procedure.
tapi yang paling mudah digunakan adalah Query Analizer dari MS SQL Server.
Syntax yang digunakan adalah :
CREATE PROCEDURE nama_stored_procedurenya @parameter1 tipe_data, @parameter2 2 tipe_data AS isi procedurenya.

Penjelasan
1. nama stored_procedure tidak boleh sama dengan nama fungsi internal, misal CREATE PROCEDURE SUM, tidak boleh ada spasi, tapi bisa menggunakan karakter _
2. Untuk membuat stored procedure gunakan perintah CREATE, untuk mengedit gunakan ALTER , untuk menghapus gunakan DROP.
perintah CREATE, ALTER, DROP dapat digunakan juga untuk membuat TABLE, VIEW, TRIGGER, FUNCTION, misal CREATE VIEW, ALTER FUNCTION,dsb
3. SQL Server mengenali parameter/variabel karena ada tanda @, contoh : @nama_barang char(50), @tanggal datetime, dsb
4. Untuk deklarasi parameter di Stored Procedure gunakan DECLARE
contoh : DECLARE @StartDate datetime, @EndDate datetime, dst..
5. Untuk memasukkan nilai ke sebuah parameter, gunakan SET atau SELECT, contoh :
SET @nama='Itanium'
SET @Web='Klik-kanan' (perintah SET hanya bisa untuk 1 variabel saja)
SELECT @nama='Itanium', @Web='Klik-kanan' (perintah SELECT bisa digunakan untuk banyak variabel)
6. Untuk mengambil nilai dari sebuah field dari tabel ke dalam variabel dapat juga menggunakan SET / SELECT , misal : SET @nama= SELECT nama FROM user WHERE login='Itanium') selalu gunakan anda(),perintah ini valid bila data yang ditemukan hanya 1, bila lebih, maka varibale @nama tidak akan ada nilai nya.
7. Untuk mengambil data dalam jumlah banyak, misal seperti array atau StringList, gunakan temporary tabel.untuk pembahasan lebih lengkap, tunggu posting berikut nya.
Contoh pembuatan Stored Procedure. Kita akan membuat sebuah Stored procedure yang berfungsi untuk menggantikan perintah SELECT yang rumit, misal untuk laporan stok barang.

dalam contoh ini ada 3 tabel yang digunakan.
1. Barang (IDBarang, NamaBarang, IDSatuan)
2. Satuan (IDSatuan, Satuan)
3. StockBarang (Tanggal, IDBarang, SAwal,Masuk,Keluar,SAkhir)
laporan yang diminta adalah untuk menampilkan stock sesuai dengan periode tertentu (bisa per hari, bisa juga per minggu, tergantung inputan StartDate dan EndDate).
SQL untuk pembuatan Stored Procedure nya :

CREATE PROCEDURE LapStockBarang1 @StartDate varchar(10), @EndDate varchar(10) AS
DECLARE @tgl1 datetime, @tgl2 datetime
**(variabel StartDate tidak bisa langsung datetime karena perintah EXEC LapStockBarang dalam bentuk string)
CREATE TABLE #TStock (IDBarang varchar(5), SAwal real, Masuk real, Keluar real)
CREATE TABLE #TStock2 (IDBarang varchar(5), SAwal real, Masuk real, Keluar real, SAkhir real)
** buat temporary table , tanda # menandai bahwa tabel ini hanya akan ada saat proses stored procedure.

SELECT @tgl1= CONVERT(datetime,@StartDate,103), @tgl2=CONVERT(datetime,@EndDate,103)
** convert varchar(string) ke tipe datetime, gunakan perintah CONVERT(tipe,variabel,format). Format 103 adalah format dd/mm/yyyy
INSERT INTO #TStock (IDBarang, SAwal)
SELECT (IDBarang, SAwal)
FROM StockBarang
WHERE tanggal= @tgl1
** masukkan saldo awal pada tanggal bulan itu
INSERT INTO #TStock (IDBarang, Masuk, Keluar)
SELECT IDBarang, SUM(Masuk), SUM(Keluar)
FROM StockBarang
WHERE tanggal BETWEEN @tgl1 AND @tgl2
GROUP BY IDBarang
** masukkan JUMLAH dari masuk dan keluar
INSERT INTO #TStock2 (IDBarang, SAwal, Masuk, Keluar)
SELECT IDBarang, SUM(SAwal), SUM(Masuk), SUM(Keluar)
FROM #TStock
GROUP BY IDBarang
** sekarang gabungkan data2 nya
UPDATE #TStock2 SET SAkhir= SAwal + Masuk - Keluar
SELECT t.*, b.NamaBarang, s.Satuan
FROM #TStock2 AS t, Barang AS b, Satuan AS s
WHERE t.IDBarang=b.IDBarang
ND b.IDSatuan=s.IDSatuan
ORDER BY b.IDBarang

Function

Function yakni blok fungsi hampir sama dengan blok prosedur, hanya fungsi harus dideklarasikan dengan tipenya atau jenis hasilnya. Tipe deklarasi ini menunjukkan tipe hasil dari fungsi.

Syntag :
· Create Function

Scalar Functions
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS scalar_return_data_type
[ WITH < function_option> [ [,] ...n] ]
[ AS ]
BEGIN
function_body
RETURN scalar_expression
END

Inline Table-valued Functions
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS TABLE
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
RETURN [ ( ] select-stmt [ ) ]

Multi-statement Table-valued Functions
CREATE FUNCTION [ owner_name. ] function_name
( [ { @parameter_name [AS] scalar_parameter_data_type [ = default ] } [ ,...n ] ] )
RETURNS @return_variable TABLE < table_type_definition >
[ WITH < function_option > [ [,] ...n ] ]
[ AS ]
BEGIN
function_body
RETURN
END
< function_option > ::=
{ ENCRYPTION | SCHEMABINDING }
< table_type_definition > :: =
( { column_definition | table_constraint } [ ,...n ] )

· DROP Function
DROP FUNCTION { [ owner_name . ] function_name } [ ,...n ]



TRIGGER



trigger juga ada di SQL Server

tapi sebelumnya apa itu trigger

saya mencoba menjelaskan dengan bahasa yg paling sedergana ya, kalau diartikan langsung ke bahasa trigger itu artinya adalah pemicu, namun jika dihubungkan ke database, trigger artinya kode SQL yang dikerjakan oleh DBMS ketika suatu kejadian terjadi.n dalam hal ini jika perintah INSERT, UPDATE, atau DELETE dijalankan di DBMS, beribet ya penjelasannya? :p

OK, saya kasih contoh sederhanan saja ya.. misalnya saya punya 2 tabel..tabel barang dan tabel pembelian, untuk lebih jelasnya bisa dilihat pada gambar dibawah ini. dalam tabel barang tersebut ada nama barang dan jumlah stock , IDEnya adalah ketika tabel pembelian ditambahkan, jumlah stock barang akan terupdate secara otomatis.misalnya ketika barang A dibeli sejumlah 3 buah maka nanti stock barang akan bertambah 3 secara otomatis. proses tersebut bisa dilakukan dgn trigger

uat program anda lebih ringkas dan mudah untuk dikembangkan.
Dengan stored procedure : algoritma yang lama dimasukk



menurut MSDN, syntac dari trigger adalah sebagai berikut

Syntax

CREATE TRIGGER trigger_name
ON { table | view }
[ WITH ENCRYPTION ]
{
{ { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ] }
[ 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 ]
}
}

biar lebih mengerti, kita mulai dengan contoh.. jadi kita butuh membuat 2 tabel tersebut di SQL server 2005, script sebagai berikut

create table BARANG
(
BAR_ID int not null,
BAR_NAMA varchar(255) not null,
BAR_STOCK int null
default 0,
constraint PK_BARANG primary key (BAR_ID)
)
go

create table PEMBELIAN
(
PEM_ID int not null,
BAR_ID int null ,
PEM_JUMLAH int null ,
constraint PK_PEMBELIAN primary key (PEM_ID)
)
go

create index RELATION_FK on PEMBELIAN (BAR_ID)
go

alter table PEMBELIAN
add constraint FK_PEMBELIA_RELATION_BARANG foreign key (BAR_ID)
references BARANG (BAR_ID)
go

INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (1,’AQUA’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (2,’TOTAL’);
INSERT INTO BARANG (BAR_ID,BAR_NAMA) VALUES (3,’AQUADES’);

setelah anda menjalankan script tersebut, maka anda akan mempunyai 2 tabel, yaitu tabel barang dengan isi 3 buah data, dan tabel pembelian dengan data masih kosong.3 data di tabel barang tersebut secara defaut stocknya adalah 0

kemudian saatnya kita buat trigger sehingga ketika kita menambahkan data di tabel pembelian dengan jumlah pembelian barang tertentu, maka stock di tabel barang akan bertambah sesuai dengan barang yg dibeli, syntac trigger tersebut adalah sebagai berikut

create trigger tambahStockbarang on pembelian
for insert
as
update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id

arti dari kode tersebut adalah sebagai berikut
create trigger tambahStockbarang on pembelian
membuat trigger dengan nama tambahStockBarang dimana trigger tersebut akan terpicu jika ada perubahan di tabel pembelian

for insert
as

perubahan tersebut adalah penambahan(insert) di tabel pembelian , selain penambahan bisa juga diisi dengan perubahan(update) atau penghapusan(delete)
for disini juga bisa rubah isinya jadi after atau instead of . perbedaanya adalah waktu trigger dikerjakan, biasaya yg sering digunakan adalah for

update b set b.bar_stock = b.bar_stock + i.pem_jumlah
from barang b join inserted i on b.bar_id = i.bar_id

ini adalah kode yg dikerjakan ketika kejadian trigger terpicu, kode diatas bertujuan merubah nilai bar_stock pada tabel barang dengan menambahkan nilai bar_stock yg sekarang dengan jumlah barang yg dibeli (pem_jumlah). perhatikan disini ada tabel yang bernama inserted, tabel tersebut merupakan tabel logika yg digunakan untuk menyimpan data yang memicu terjadinya trigger, dalam hal ini nilai data yg dimasukkan(insert) kedalam tabel pembelian, selain inserted, tabel logika lainnya adalah deleted, tabel logika ini digunakan untuk trigger yg terpicu dengan kejadian delete

kita coba masukkan kode berikut

INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (1,1,4);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (2,3,2);
INSERT INTO PEMBELIAN (PEM_ID, BAR_ID, PEM_JUMLAH) VALUES (3,1,1);

arti kode tersebut
pem_id haruslah beda karena merupakan primary key
beli aqua(kode bar_id=1) sebanyak 4
beli aquades (kode bar_id=3) sebanyak 2
beli aqua lagi sebanyak 1

sehingga secara keseluruhan yg dibeli aqua sebanyak 5 dan aquades sebanyak 2
karena default nilai stock barang adalah 0, maka seharusnya nilai aqua 5 dan aquades 2 adalah jumlah stock barang sekarang ini