Basis Data Lanjut 1.5

24
BASIS DATA LANJUT SISTEM INFORMASI APOTEK <1.5> Nama : Lusi Susanti ( 08120077 ) Erfan Rachmad S ( 09120073 ) TEKNIK INFORMATIKA UNIVERSITAS WIJAYA KUSUMA SURABAYA 2010-2011

description

Laporan Basis Data Lanjut (Sistem Apotek) versi 1.5

Transcript of Basis Data Lanjut 1.5

Page 1: Basis Data Lanjut 1.5

BASIS DATA LANJUT

SISTEM INFORMASI APOTEK <1.5>

Nama :

Lusi Susanti ( 08120077 )

Erfan Rachmad S ( 09120073 )

TEKNIK INFORMATIKA

UNIVERSITAS WIJAYA KUSUMA SURABAYA

2010-2011

Page 2: Basis Data Lanjut 1.5

CDM ( Concept Data Model )

Jenis_Golongan

supply

punya

punya

(D)

punya

catat

Relationship_7punya

punya

catat

jenis_pegawai

bentuk_obat

Jenis_Obat

Obat

ID_Obat

Nama_Obat

Khasiat_Obat

Harga_Jual

Satuan

Status_Obat

kadaluarsa

<pi> Variable characters (7)

Variable characters (50)

Variable characters (50)

Integer

Variable characters (25)

Integer

Date

golongan_obat

id_golongan

nama_golongan

keterangan_golongan

<pi> Integer

Variable characters (50)

Variable characters (59)

golongan_obat

...

<pi>

Pegawai

id_pegawai

nama_pegawai

alamat_pegawai

no_telpon_pegawai

tgl_masuk_pegawai

<pi> Variable characters (5)

Variable characters (50)

Variable characters (50)

Variable characters (15)

Date

pegawai <pi>

Stok_Obat

numbering

jumlah_stok

<pi> Integer

Integer

<M>

<M>

Identifier_1

...

<pi>

Supplier

ID_Supplier

Nama_Supplier

Alamat_Supplier

No_Telpon_Supplier

<pi> Variable characters (3)

Variable characters (50)

Variable characters (50)

Variable characters (15)

Supplier <pi>

Pembelian

id_pembelian

tgl_pembelian

keterangan_pembelian

<pi> Variable characters (10)

Date

Variable characters (50)

id_pembelian <pi>

detail_pembelian

num_pembelian

jumlah_pembelian

harga_satuan

<pi> Integer

Integer

Money

<M>

<M>

<M>

detail_pembelian

...

<pi>

Pelanggan

id_pelanggan

nama_pelanggan

alamat_pelanggan

no_telpon_pelanggan

<pi> Variable characters (10)

Variable characters (25)

Variable characters (50)

Variable characters (15)

<M>

<M>

pelanggan <pi>

penjualan

id_penjualan

tgl_penjualan

total_harga_penjualan

keterangan_penjualan

<pi> Variable characters (10)

Date & Time

Money

Variable characters (50)

<M>

penjualan <pi>

detail_penjualan

num_penjualan

jumlah_barang

harga_satuan

<pi> Integer

Integer

Money

<M>

<M>

<M>

detail_penjualan <pi>

pegawai_tetap

gaji_tetap Integer <M>

pegawai_ttetap

gaji_harian Integer <M>

Bentuk_Obat

ID_bentuk_obat

Bentuk_Obat

Keterangan_bentuk_obat

<pi> Integer

Variable characters (25)

Variable characters (50)

Identifier_1 <pi>

Obat_Paten

Kode_Paten Variable characters (25)

Obat_Generik

Kode_Generik Variable characters (25)

Page 3: Basis Data Lanjut 1.5

Deskripsi

Obat memiliki jenis obat (Obat paten dan Obat

generik)

Obat memiliki jenis golongan

(bebas,terbatas,dll)

Obat memliki bentuk antara lain

(cair,pil,kapsul,dll)

Obat memiliki stok obat yang diupdate secara

regular berdasar transaksi

Pegawai mencatat 2 jenis transaksi, Pembelian

dan Penjualan

Setiap Penjualan memiliki detail Penjualan (

yang didalamnya melibatkan Entity Obat, Pegawai dan Pelanggan )

Setiap Pembelian memiliki detail Pembelian

(yang didalamnya melibatkan Entity Obat, Pegawai dan Supplier )

Pegawai dibagi menjadi 2 jenis yaitu pegawai

tetap dan tidak tetap

Page 4: Basis Data Lanjut 1.5

PDM (Physical Data Model)

Obat

ID_Obat

ID_bentuk_obat

id_golongan

Nama_Obat

Khasiat_Obat

Harga_Jual

Satuan

Status_Obat

kadaluarsa

Kode_Paten

Kode_Generik

varchar(7)

int

int

varchar(50)

varchar(50)

int

varchar(25)

int

datetime

varchar(25)

varchar(25)

<pk>

<fk2>

<fk1>

golongan_obat

id_golongan

nama_golongan

keterangan_golongan

...

int

varchar(50)

varchar(59)

<pk>

Pegawai

id_pegawai

nama_pegawai

alamat_pegawai

no_telpon_pegawai

tgl_masuk_pegawai

gaji_tetap

gaji_harian

varchar(5)

varchar(50)

varchar(50)

varchar(15)

datetime

int

int

<pk>

Stok_Obat

numbering

ID_Obat

jumlah_stok

...

int

varchar(7)

int

<pk>

<fk>

Supplier

ID_Supplier

Nama_Supplier

Alamat_Supplier

No_Telpon_Supplier

...

varchar(3)

varchar(50)

varchar(50)

varchar(15)

<pk>

Pembelian

id_pembelian

ID_Supplier

id_pegawai

tgl_pembelian

keterangan_pembelian

...

varchar(10)

varchar(3)

varchar(5)

datetime

varchar(50)

<pk>

<fk1>

<fk2>

detail_pembelian

num_pembelian

id_pembelian

ID_Obat

jumlah_pembelian

harga_satuan

...

int

varchar(10)

varchar(7)

int

money

<pk>

<fk1>

<fk2>

Pelanggan

id_pelanggan

nama_pelanggan

alamat_pelanggan

no_telpon_pelanggan

...

varchar(10)

varchar(25)

varchar(50)

varchar(15)

<pk>

penjualan

id_penjualan

id_pegawai

id_pelanggan

tgl_penjualan

total_harga_penjualan

keterangan_penjualan

...

varchar(10)

varchar(5)

varchar(10)

datetime

money

varchar(50)

<pk>

<fk1>

<fk2>

detail_penjualan

num_penjualan

id_penjualan

ID_Obat

jumlah_barang

harga_satuan

...

int

varchar(10)

varchar(7)

int

money

<pk>

<fk2>

<fk1>

Bentuk_Obat

ID_bentuk_obat

Bentuk_Obat

Keterangan_bentuk_obat

...

int

varchar(25)

varchar(50)

<pk>

Page 5: Basis Data Lanjut 1.5

Active Database Model

Stored Procedure

sp_delete_all_record

Stored procedure untuk melakukan penghapusan keseluruhan record pada

tabel yang ada

sp_contoh_database

Stored procedure untuk contoh database apotek

Function

fn_kerja_tahun

Fungsi untuk menghitung waktu kerja pegawai dengan satuan tahun

fn_kerja_bulan

Fungsi untuk menghitung waktu kerja pegawai dengan satuan bulan

fn_kerja_hari

Fungsi untuk menghitung waktu kerja pegawai dengan satuan hari

Trigger

tg_update_stokObat

Melakukan update data pada tabel stok_obat apabila terjadi perubahan

pada tabel penjualan, maka pada tabel stok_obat akan dilakukan update

pada column jumlah_stok

tg_insert_stokObat

Melakukan update data pada tabel stok_obat apabila terjadi perubahan

pada tabel pembelian, maka pada tabel stok_obat akan dilakukan update

pada column jumlah_stok

Package

PK_Apotek

Package yang terdiri dari 2 procedure dengan nama :

delete_golongan_obat, dan insert golongan_obat

Page 6: Basis Data Lanjut 1.5

Lampiran Script Implementasi

SQL SERVER 2000 ENTERPRISE

Script pembuatan Database : USE MASTER

GO

if EXISTS( select CATALOG_NAME FROM INFORMATION_SCHEMA.SCHEMATA

WHERE CATALOG_NAME='APOTEK')

DROP DATABASE APOTEK

GO

CREATE DATABASE APOTEK

GO

USE APOTEK

GO

if exists (select 1

from sysobjects

where id = object_id('BENTUK_OBAT')

and type = 'U')

drop table BENTUK_OBAT

go

if exists (select 1

from sysobjects

where id = object_id('DETAIL_PEMBELIAN')

and type = 'U')

drop table DETAIL_PEMBELIAN

go

if exists (select 1

from sysobjects

where id = object_id('DETAIL_PENJUALAN')

and type = 'U')

drop table DETAIL_PENJUALAN

go

if exists (select 1

from sysobjects

where id = object_id('GOLONGAN_OBAT')

and type = 'U')

drop table GOLONGAN_OBAT

go

if exists (select 1

from sysobjects

where id = object_id('OBAT')

and type = 'U')

drop table OBAT

go

if exists (select 1

from sysobjects

where id = object_id('PEGAWAI')

and type = 'U')

drop table PEGAWAI

go

if exists (select 1

from sysobjects

where id = object_id('PELANGGAN')

and type = 'U')

drop table PELANGGAN

go

Page 7: Basis Data Lanjut 1.5

if exists (select 1

from sysobjects

where id = object_id('PEMBELIAN')

and type = 'U')

drop table PEMBELIAN

go

if exists (select 1

from sysobjects

where id = object_id('PENJUALAN')

and type = 'U')

drop table PENJUALAN

go

if exists (select 1

from sysobjects

where id = object_id('STOK_OBAT')

and type = 'U')

drop table STOK_OBAT

go

if exists (select 1

from sysobjects

where id = object_id('SUPPLIER')

and type = 'U')

drop table SUPPLIER

go

/*==============================================================*/

/* Table: BENTUK_OBAT */

/*==============================================================*/

create table BENTUK_OBAT (

ID_BENTUK_OBAT int not null,

BENTUK_OBAT varchar(25) not null,

KETERANGAN_BENTUK_OBAT varchar(50) null,

constraint PK_BENTUK_OBAT primary key nonclustered (ID_BENTUK_OBAT)

)

go

/*==============================================================*/

/* Table: DETAIL_PEMBELIAN */

/*==============================================================*/

create table DETAIL_PEMBELIAN (

NUM_PEMBELIAN int identity,

ID_PEMBELIAN varchar(10) not null,

ID_OBAT varchar(7) null,

JUMLAH_PEMBELIAN int not null,

HARGA_SATUAN money not null,

constraint PK_DETAIL_PEMBELIAN primary key nonclustered

(NUM_PEMBELIAN)

)

go

/*==============================================================*/

/* Table: DETAIL_PENJUALAN */

/*==============================================================*/

create table DETAIL_PENJUALAN (

NUM_PENJUALAN int identity,

ID_PENJUALAN varchar(10) not null,

ID_OBAT varchar(7) null,

JUMLAH_BARANG int not null,

HARGA_SATUAN money not null,

constraint PK_DETAIL_PENJUALAN primary key nonclustered

Page 8: Basis Data Lanjut 1.5

(NUM_PENJUALAN)

)

go

/*==============================================================*/

/* Table: GOLONGAN_OBAT */

/*==============================================================*/

create table GOLONGAN_OBAT (

ID_GOLONGAN int not null,

NAMA_GOLONGAN varchar(50) null,

KETERANGAN_GOLONGAN varchar(59) null,

constraint PK_GOLONGAN_OBAT primary key nonclustered (ID_GOLONGAN)

)

go

/*==============================================================*/

/* Table: OBAT */

/*==============================================================*/

create table OBAT (

ID_OBAT varchar(7) not null,

ID_BENTUK_OBAT int not null,

ID_GOLONGAN int not null,

NAMA_OBAT varchar(50) not null,

KHASIAT_OBAT varchar(50) null,

HARGA_JUAL int not null,

SATUAN varchar(25) null,

STATUS_OBAT int not null,

KADALUARSA datetime null,

KODE_PATEN varchar(25) null,

KODE_GENERIK varchar(25) null,

constraint PK_OBAT primary key nonclustered (ID_OBAT)

)

go

/*==============================================================*/

/* Table: PEGAWAI */

/*==============================================================*/

create table PEGAWAI (

ID_PEGAWAI varchar(5) not null,

NAMA_PEGAWAI varchar(50) null,

ALAMAT_PEGAWAI varchar(50) null,

NO_TELPON_PEGAWAI varchar(15) null,

TGL_MASUK_PEGAWAI datetime null,

GAJI_TETAP int null,

GAJI_HARIAN int null,

constraint PK_PEGAWAI primary key nonclustered (ID_PEGAWAI)

)

go

/*==============================================================*/

/* Table: PELANGGAN */

/*==============================================================*/

create table PELANGGAN (

ID_PELANGGAN varchar(10) not null,

NAMA_PELANGGAN varchar(25) not null,

ALAMAT_PELANGGAN varchar(50) null,

NO_TELPON_PELANGGAN varchar(15) null,

constraint PK_PELANGGAN primary key nonclustered (ID_PELANGGAN)

)

go

/*==============================================================*/

/* Table: PEMBELIAN */

/*==============================================================*/

create table PEMBELIAN (

ID_PEMBELIAN varchar(10) not null,

Page 9: Basis Data Lanjut 1.5

ID_SUPPLIER varchar(3) not null,

ID_PEGAWAI varchar(5) not null,

TGL_PEMBELIAN datetime not null,

KETERANGAN_PEMBELIAN varchar(50) null,

constraint PK_PEMBELIAN primary key nonclustered (ID_PEMBELIAN)

)

go

/*==============================================================*/

/* Table: PENJUALAN */

/*==============================================================*/

create table PENJUALAN (

ID_PENJUALAN varchar(10) not null,

ID_PEGAWAI varchar(5) not null,

ID_PELANGGAN varchar(10) not null,

TGL_PENJUALAN datetime null,

TOTAL_HARGA_PENJUALAN money null,

KETERANGAN_PENJUALAN varchar(50) null,

constraint PK_PENJUALAN primary key nonclustered (ID_PENJUALAN)

)

go

/*==============================================================*/

/* Table: STOK_OBAT */

/*==============================================================*/

create table STOK_OBAT (

NUMBERING int identity,

ID_OBAT varchar(7) null,

JUMLAH_STOK int not null,

constraint PK_STOK_OBAT primary key nonclustered (NUMBERING)

)

go

/*==============================================================*/

/* Table: SUPPLIER */

/*==============================================================*/

create table SUPPLIER (

ID_SUPPLIER varchar(3) not null,

NAMA_SUPPLIER varchar(50) null,

ALAMAT_SUPPLIER varchar(50) null,

NO_TELPON_SUPPLIER varchar(15) null,

constraint PK_SUPPLIER primary key nonclustered (ID_SUPPLIER)

)

go

Stored Procedure

--@sp_contoh_database

USE APOTEK

IF EXISTS (SELECT name FROM sysobjects Where name='sp_contoh_database'

AND type='P')

DROP PROCEDURE sp_contoh_database

GO

Create Procedure sp_contoh_database

As

--tabel bentuk Obat

Insert into Bentuk_Obat Values(1,'Pulvis','')

Insert into Bentuk_Obat Values(2,'Pulveres','')

Insert into Bentuk_Obat Values(3,'Tablet','')

Insert into Bentuk_Obat Values(4,'Pil','')

Insert into Bentuk_Obat Values(5,'Kapsul','')

Insert into Bentuk_Obat Values(6,'Kaplet','')

Insert into Bentuk_Obat Values(7,'Larutan','')

Insert into Bentuk_Obat Values(8,'Suspensi','')

Insert into Bentuk_Obat Values(9,'Emulsi','')

Page 10: Basis Data Lanjut 1.5

Insert into Bentuk_Obat Values(10,'Galenik','')

Insert into Bentuk_Obat Values(11,'Ekstrak','')

Insert into Bentuk_Obat Values(12,'Infusa','')

Insert into Bentuk_Obat Values(13,'Imunoserum','')

Insert into Bentuk_Obat Values(14,'Salep','')

Insert into Bentuk_Obat Values(15,'Suppositoria','')

Insert into Bentuk_Obat Values(16,'Obat tetes','')

----------------------------------------------------------------

--tabel golongan obat

INSERT into GOLONGAN_OBAT Values(1,'OB','Obat Bebas')

INSERT into GOLONGAN_OBAT Values(2,'OBT','Obat Bebas Terbatas')

INSERT into GOLONGAN_OBAT Values(3,'OK','Obat Keras')

---------------------------------------------------------------

--Tabel Pegawai

--0XXXX (Tetap) 1XXXXX (Tidak Tetap)

INSERT into Pegawai

Values('00001','John Krasus','Jalan Dinoyo 3/5','081678902','03/11/2005',1250000,null)

INSERT into Pegawai

Values('00002','Shiva Saracehan','Jalan Diponegoro II/2','088332200','02/17/2005',1450000,null)

INSERT into Pegawai

Values('00003','Titik','Jalan Holahola 3/13','08967325','01/19/2005',1650000,null)

INSERT into Pegawai

Values('10001','Lola','Jalan Mentari II/3','08967334','01/02/2007',null,50000)

INSERT into Pegawai

Values('10002','CeceNi','Jalan Umum 3/12','082324511','08/01/2007',null,50000)

--TABEL Pelanggan

INSERT into Pelanggan

Values ('P00001','Nadia Aini','Jalan JemurSari','031-84990952')

INSERT into Pelanggan

Values ('P00002','Refi Syahmudin','Jalan SariJemur','031-8495351')

INSERT into Pelanggan

Values ('P00003','Bapak Trio','Jalan Tidar','081592939')

INSERT into Pelanggan

Values ('P00004','Ibu Tri','Jalan Mengganti','0819999')

-------------------------------------------------------------------------

------------------------

--TABEL SUPPLIER

INSERT into SUPPLIER

VALUES ('001','PT.Kcimia Farma','Jalan Tambungan Jakarta','021-567123')

INSERT into SUPPLIER

VALUES ('002','PT.Cholrin Sun Jaya','Jalan Merak Medan','071-321001')

INSERT into SUPPLIER

VALUES ('003','PT.Surya Indah Farma','Jalan Mendet Jakarta','021-567122')

--TABEL OBAT

--GENERIK

--

(ID_OBAT,ID_BENTUK,ID_GOLONGAN,NAMA_OBAT,KHASIAT_OBAT,HARGA_JUAL,SATUAN,STATUS,STATUS_

OBAT,

--KADALURASA,KODE_PATEN,KODE_GENERIK)

--GENERIK

INSERT into OBAT

VALUES('G000001',4,1,'Parasetamol','Demam,Nyeri',12000,'Kaplet',1,'04/30/2011',null,'GX1111')

INSERT into OBAT

VALUES('G000002',3,1,'Asetosal','Sakit Kepala',13000,'Kaplet',1,'02/1/2012',null,'GX11112')

INSERT into OBAT

VALUES('G000003',6,1,'Amoksisilin','Anti Infeksi',12000,'Sashet',1,'05/10/2011',null,'GX11113')

INSERT into OBAT

VALUES('G000004',5,1,'Ergotamin','Anti Migrain',22000,'Biji',1,null,null,'GX11114')

--PATEN(MEREK)

INSERT into OBAT

VALUES('P000001',5,1,'Ultra Flu','Anti Migrain',5000,'Sachet',1,null,'PX11112',null)

Page 11: Basis Data Lanjut 1.5

INSERT into OBAT

VALUES('P000002',5,1,'Incidal','Anti Alergi',2500,'Biji',1,null,'PX11112',null)

INSERT into OBAT

VALUES('P000003',5,1,'Komix','Batuk',7500,'Kaplet',1,null,'PX11113',null)

--TABEL PEMBELIAN

--pembelian#1

INSERT into PEMBELIAN VALUES('BU-00-0001','001','00001','3/10/2011','Pembelian cash')

--TABEL DETAIL PEMBELIAN

INSERT into DETAIL_PEMBELIAN (ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES ('BU-00-0001','G000001',100,10000)

INSERT into DETAIL_PEMBELIAN (ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES ('BU-00-0001','G000002',50,12000)

INSERT into DETAIL_PEMBELIAN (ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES ('BU-00-0001','P000001',75,4000)

--Penambahan stok OBAT (contoh AWAL)

INSERT into STOK_OBAT (ID_OBAT,JUMLAH_STOK)

VALUES('G000001',100)

INSERT into STOK_OBAT (ID_OBAT,JUMLAH_STOK)

VALUES('G000002',50)

INSERT into STOK_OBAT (ID_OBAT,JUMLAH_STOK)

VALUES('P000001',75)

GO

--@sp_delete_all_record

USE APOTEK

IF EXISTS (SELECT name FROM sysobjects Where name='sp_delete_all_record' AND type='P')

DROP PROCEDURE sp_delete_all_record

GO

Create Procedure sp_delete_all_record

As

DELETE From Bentuk_Obat

DELETE From Detail_Pembelian

DELETE From Detail_Penjualan

DELETE From Golongan_Obat

DELETE From Obat

DELETE From Pegawai

DELETE From Pelanggan

DELETE From Pembelian

DELETE From Penjualan

DELETE From Stok_Obat

DELETE From Supplier

GO

Function

IF EXISTS (SELECT name FROM sysobjects

WHERE name='fn_gaji_tetap' and type='FN')

DROP FUNCTION fn_gaji_tetap

GO

CREATE FUNCTION fn_gaji_tetap(@ID_PEGAWAI varchar(5))

RETURNS int

AS

BEGIN

DECLARE @nilai int

SET @nilai=(SELECT GAJI_TETAP FROM PEGAWAI WHERE ID_PEGAWAI=@ID_PEGAWAI)

RETURN @nilai

END

GO

IF EXISTS (SELECT name FROM sysobjects

WHERE name='fn_kerja_tahun' and type='FN')

DROP FUNCTION fn_kerja_tahun

GO

CREATE FUNCTION fn_kerja_tahun(@ID_PEGAWAI varchar(5),@date_now datetime)

RETURNS int

AS

Page 12: Basis Data Lanjut 1.5

BEGIN

DECLARE @tahun1 int,@tahun2 int,@tgl datetime,@hari float

DECLARE @bulan1 int,@bulan2 int,@hari1 int,@hari2 int

SET @tgl=(SELECT TGL_MASUK_PEGAWAI FROM PEGAWAI WHERE ID_PEGAWAI=@ID_PEGAWAI)

SET @tahun1=DATEPART(year,@tgl)

SET @bulan1=DATEPART(month,@tgl)

SET @hari1=DATEPART(day,@tgl)

SET @tahun2=DATEPART(year,@date_now)

SET @bulan2=DATEPART(month,@date_now)

SET @hari2=DATEPART(day,@date_now)

IF @tahun2 <= @tahun1

SET @hari=0

ELSE

IF @bulan2 > @bulan1

SET @hari=@tahun2-@tahun1

ELSE

SET @hari=(@tahun2-@tahun1)-1

RETURN @hari

END

GO

IF EXISTS (SELECT name FROM sysobjects

WHERE name='fn_kerja_bulan' and type='FN')

DROP FUNCTION fn_kerja_bulan

GO

CREATE FUNCTION fn_kerja_bulan(@ID_PEGAWAI varchar(5),@date_now datetime)

RETURNS int

AS

BEGIN

DECLARE @tahun1 int,@tahun2 int,@tgl datetime,@hari float

DECLARE @bulan1 int,@bulan2 int,@hari1 int,@hari2 int

SET @tgl=(SELECT TGL_MASUK_PEGAWAI FROM PEGAWAI WHERE ID_PEGAWAI=@ID_PEGAWAI)

SET @tahun1=DATEPART(year,@tgl)

SET @bulan1=DATEPART(month,@tgl)

SET @hari1=DATEPART(day,@tgl)

SET @tahun2=DATEPART(year,@date_now)

SET @bulan2=DATEPART(month,@date_now)

SET @hari2=DATEPART(day,@date_now)

IF @tahun2 <= @tahun1

SET @hari=0

ELSE

IF @bulan2 > @bulan1

If @hari2 >=@hari1

SET @hari=@bulan2-@bulan1

ELSE

SET @hari=(@bulan2-@bulan1)-1

--SET @hari=@tahun2-@tahun1

ELSE

IF @hari2 >= @hari1

SET @hari=(@tahun1+12)-@tahun2

ELSE

SET @hari=(@tahun1+12)-@tahun2-1

RETURN @hari

END

GO

IF EXISTS (SELECT name FROM sysobjects

WHERE name='fn_kerja_hari' and type='FN')

Page 13: Basis Data Lanjut 1.5

DROP FUNCTION fn_kerja_hari

GO

CREATE FUNCTION fn_kerja_hari(@ID_PEGAWAI varchar(5),@date_now datetime)

RETURNS int

AS

BEGIN

DECLARE @tahun1 int,@tahun2 int,@tgl datetime,@hari int

DECLARE @bulan1 int,@bulan2 int,@hari1 int,@hari2 int

SET @tgl=(SELECT TGL_MASUK_PEGAWAI FROM PEGAWAI WHERE ID_PEGAWAI=@ID_PEGAWAI)

SET @tahun1=DATEPART(year,@tgl)

SET @bulan1=DATEPART(month,@tgl)

SET @hari1=DATEPART(day,@tgl)

SET @tahun2=DATEPART(year,@date_now)

SET @bulan2=DATEPART(month,@date_now)

SET @hari2=DATEPART(day,@date_now)

IF @tahun2 <= @tahun1

SET @hari=0

ELSE

IF @hari2 >= @hari1

SET @hari=@hari2-@hari1

ELSE

SET @hari=(@hari2+30)-@hari1

RETURN @hari

END

GO

TRIGGER

'tg_update_stokObat'

IF EXISTS(SELECT name FROM sysobjects

WHERE name='tg_update_stokObat' AND type='TR')

DROP TRIGGER tg_update_stokObat

GO

Create TRIGGER tg_update_stokObat on DETAIL_PENJUALAN

FOR INSERT

As

UPDATE STOK_OBAT set stok_obat.jumlah_stok=STOK_OBAT.Jumlah_stok - DETAIL_PENJUALAN.jumlah_barang

From Stok_Obat join inserted DETAIL_PENJUALAN on STOK_OBAT.id_obat=DETAIL_PENJUALAN.id_obat

GO

--trigger tambah stok akibat pembelian

'tg_insert_StokObat'

IF EXISTS(SELECT name FROM sysobjects

WHERE name='tg_insert_StokObat' AND type='TR')

DROP TRIGGER tg_insert_StokObat

GO

Create TRIGGER tg_insert_StokObat on DETAIL_PEMBELIAN

FOR INSERT

As

DECLARE @id varchar(10),@jumlah int,@record int

SELECT @id= id_obat from inserted

SELECT @jumlah=jumlah_pembelian from inserted

IF NOT EXISTS (SELECT ID_OBAT from STOK_OBAT WHERE ID_OBAT=@id)

BEGIN

PRINT 'Record BELUM ada'

PRINT @id + ' ' + cast(@jumlah as varchar(10))

INSERT into STOK_OBAT (ID_OBAT,JUMLAH_STOK)

VALUES(@id,@jumlah)

END

Page 14: Basis Data Lanjut 1.5

ELSE

BEGIN

PRINT 'Record SUDAH ada'

UPDATE STOK_OBAT SET jumlah_stok=jumlah_stok+detail_pembelian.jumlah_pembelian

FROM STOK_OBAT join inserted DETAIL_PEMBELIAN on STOK_OBAT.id_obat=DETAIL_PEMBELIAN.id_obat

END

GO

/*

View pendukungan

*/

--VIEW OBAT

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS

WHERE TABLE_NAME='view_obat')

DROP VIEW view_obat

GO

CREATE VIEW view_obat

AS

SELECT OBAT.ID_OBAT,OBAT.ID_BENTUK_OBAT,BENTUK_OBAT,OBAT.ID_GOLONGAN,NAMA_GOLONGAN,

NAMA_OBAT,KHASIAT_OBAT,HARGA_JUAL,SATUAN,STATUS_OBAT,KODE_PATEN,KODE_GENERIK,CONVERT

(varchar,KADALUARSA,103)as KADALUARSA,JUMLAH_STOK

FROM OBAT inner join BENTUK_OBAT on OBAT.ID_BENTUK_OBAT=BENTUK_OBAT.ID_BENTUK_OBAT join

GOLONGAN_OBAT on OBAT.ID_GOLONGAN=GOLONGAN_OBAT.ID_GOLONGAN join STOK_OBAT on

OBAT.ID_OBAT=STOK_OBAT.ID_OBAT

GO

--

--VIEW PEGAWAI

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS

WHERE TABLE_NAME='view_pegawai')

DROP VIEW view_pegawai

GO

CREATE VIEW view_pegawai

AS

SELECT ID_PEGAWAI,NAMA_PEGAWAI,ALAMAT_PEGAWAI,GAJI_TETAP,

CONVERT(varchar,TGL_MASUK_PEGAWAI,103) as TANGGAL_MASUK,

cast(dbo.fn_kerja_tahun(ID_PEGAWAI,getdate())as varchar) + ' Tahun' + ' ' +

cast(dbo.fn_kerja_bulan(ID_PEGAWAI,getdate())as varchar) + ' Bulan' +' '+

cast(dbo.fn_kerja_hari(ID_PEGAWAI,getdate())as varchar) + ' Hari' As Lama_Kerja

from pegawai

GO

//Catatanscript demo implementasi

exec sp_contoh_database

insert into detail_pembelian

values('px11','G000001',99,50000)

insert into detail_penjualan

values('gx11','G000001',16,50333)

delete detail_pembelian where id_pembelian='px11'

delete stok_obat where ID_OBAT='G000003'

select * from detail_pembelian

select * from stok_obat

select * from view_pegawai

Page 15: Basis Data Lanjut 1.5

ORACLE 10g ENTERPRISE

Script pembuatan tabel & sequence

drop table BENTUK_OBAT cascade constraints;

drop table DETAIL_PEMBELIAN cascade constraints;

drop table DETAIL_PENJUALAN cascade constraints;

drop table GOLONGAN_OBAT cascade constraints;

drop table OBAT cascade constraints;

drop table PEGAWAI cascade constraints;

drop table PELANGGAN cascade constraints;

drop table PEMBELIAN cascade constraints;

drop table PENJUALAN cascade constraints;

drop table STOK_OBAT cascade constraints;

drop table SUPPLIER cascade constraints;

--drop sequence

drop sequence sq_detail_pembelian;

drop sequence sq_detail_penjualan;

drop sequence sq_stok_obat;

/*==============================================================*/

/* Table: BENTUK_OBAT */

/*==============================================================*/

create table BENTUK_OBAT (

ID_BENTUK_OBAT INTEGER not null,

BENTUK_OBAT VARCHAR2(25) not null,

KETERANGAN_BENTUK_OBAT VARCHAR2(50),

constraint PK_BENTUK_OBAT primary key (ID_BENTUK_OBAT)

);

/*==============================================================*/

/* Table: DETAIL_PEMBELIAN */

/*==============================================================*/

create table DETAIL_PEMBELIAN (

NUM_PEMBELIAN INTEGER not null,

ID_PEMBELIAN VARCHAR2(10) not null,

ID_OBAT VARCHAR2(7),

JUMLAH_PEMBELIAN INTEGER not null,

HARGA_SATUAN NUMBER(8,2) not null,

constraint PK_DETAIL_PEMBELIAN primary key (NUM_PEMBELIAN)

);

--autoincrement

create sequence sq_detail_pembelian

start with 1

increment by 1

nomaxvalue;

/*==============================================================*/

/* Table: DETAIL_PENJUALAN */

/*==============================================================*/

create table DETAIL_PENJUALAN (

NUM_PENJUALAN INTEGER not null,

ID_PENJUALAN VARCHAR2(10) not null,

ID_OBAT VARCHAR2(7),

JUMLAH_BARANG INTEGER not null,

HARGA_SATUAN NUMBER(8,2) not null,

constraint PK_DETAIL_PENJUALAN primary key (NUM_PENJUALAN)

);

--autoincrement

create sequence sq_detail_penjualan

start with 1

increment by 1

nomaxvalue;

Page 16: Basis Data Lanjut 1.5

/*==============================================================*/

/* Table: GOLONGAN_OBAT */

/*==============================================================*/

create table GOLONGAN_OBAT (

ID_GOLONGAN INTEGER not null,

NAMA_GOLONGAN VARCHAR2(50),

KETERANGAN_GOLONGAN VARCHAR2(59),

constraint PK_GOLONGAN_OBAT primary key (ID_GOLONGAN)

);

/*==============================================================*/

/* Table: OBAT */

/*==============================================================*/

create table OBAT (

ID_OBAT VARCHAR2(7) not null,

ID_BENTUK_OBAT INTEGER not null,

ID_GOLONGAN INTEGER not null,

NAMA_OBAT VARCHAR2(50) not null,

KHASIAT_OBAT VARCHAR2(50),

HARGA_JUAL INTEGER not null,

SATUAN VARCHAR2(25),

STATUS_OBAT INTEGER not null,

KADALUARSA DATE,

KODE_PATEN VARCHAR2(25),

KODE_GENERIK VARCHAR2(25),

constraint PK_OBAT primary key (ID_OBAT)

);

/*==============================================================*/

/* Table: PEGAWAI */

/*==============================================================*/

create table PEGAWAI (

ID_PEGAWAI VARCHAR2(5) not null,

NAMA_PEGAWAI VARCHAR2(50),

ALAMAT_PEGAWAI VARCHAR2(50),

NO_TELPON_PEGAWAI VARCHAR2(15),

TGL_MASUK_PEGAWAI DATE,

GAJI_TETAP INTEGER,

GAJI_HARIAN INTEGER,

constraint PK_PEGAWAI primary key (ID_PEGAWAI)

);

/*==============================================================*/

/* Table: PELANGGAN */

/*==============================================================*/

create table PELANGGAN (

ID_PELANGGAN VARCHAR2(10) not null,

NAMA_PELANGGAN VARCHAR2(25) not null,

ALAMAT_PELANGGAN VARCHAR2(50),

NO_TELPON_PELANGGAN VARCHAR2(15),

constraint PK_PELANGGAN primary key (ID_PELANGGAN)

);

/*==============================================================*/

/* Table: PEMBELIAN */

/*==============================================================*/

create table PEMBELIAN (

ID_PEMBELIAN VARCHAR2(10) not null,

ID_SUPPLIER VARCHAR2(3) not null,

ID_PEGAWAI VARCHAR2(5) not null,

TGL_PEMBELIAN DATE not null,

KETERANGAN_PEMBELIAN VARCHAR2(50),

constraint PK_PEMBELIAN primary key (ID_PEMBELIAN)

);

Page 17: Basis Data Lanjut 1.5

/*==============================================================*/

/* Table: PENJUALAN */

/*==============================================================*/

create table PENJUALAN (

ID_PENJUALAN VARCHAR2(10) not null,

ID_PEGAWAI VARCHAR2(5) not null,

ID_PELANGGAN VARCHAR2(10) not null,

TGL_PENJUALAN DATE,

TOTAL_HARGA_PENJUALAN NUMBER(8,2),

KETERANGAN_PENJUALAN VARCHAR2(50),

constraint PK_PENJUALAN primary key (ID_PENJUALAN)

);

/*==============================================================*/

/* Table: STOK_OBAT */

/*==============================================================*/

create table STOK_OBAT (

NUMBERING INTEGER not null,

ID_OBAT VARCHAR2(7),

JUMLAH_STOK INTEGER not null,

constraint PK_STOK_OBAT primary key (NUMBERING)

);

--autoincrement

create sequence sq_stok_obat

start with 1

increment by 1

nomaxvalue;

/*==============================================================*/

/* Table: SUPPLIER */

/*==============================================================*/

create table SUPPLIER (

ID_SUPPLIER VARCHAR2(3) not null,

NAMA_SUPPLIER VARCHAR2(50),

ALAMAT_SUPPLIER VARCHAR2(50),

NO_TELPON_SUPPLIER VARCHAR2(15),

constraint PK_SUPPLIER primary key (ID_SUPPLIER)

);

------------------------------------------------------------------------

--VIEW

CREATE or REPLACE VIEW VIEW_OBAT

AS

SELECT

OBAT.ID_OBAT,OBAT.ID_BENTUK_OBAT,BENTUK_OBAT,OBAT.ID_GOLONGAN,NAMA_GOLONG

AN,

NAMA_OBAT,KHASIAT_OBAT,HARGA_JUAL,SATUAN,STATUS_OBAT,KODE_PATEN,KODE_GEN

ERIK,

JUMLAH_STOK

FROM OBAT inner join BENTUK_OBAT on

OBAT.ID_BENTUK_OBAT=BENTUK_OBAT.ID_BENTUK_OBAT join

GOLONGAN_OBAT on OBAT.ID_GOLONGAN=GOLONGAN_OBAT.ID_GOLONGAN join

STOK_OBAT on OBAT.ID_OBAT=STOK_OBAT.ID_OBAT;

CREATE or REPLACE VIEW "view_pegawai"

AS

SELECT ID_PEGAWAI,NAMA_PEGAWAI,ALAMAT_PEGAWAI,GAJI_TETAP,

to_char(TGL_MASUK_PEGAWAI,'dd/mm/yyyy') as TANGGAL_MASUK,

CAST("fn_kerja_tahun"(ID_PEGAWAI, to_date(sysdate,'dd/mm/yyyy')) as VARCHAR2(50)) || ' Tahun ' ||

CAST("fn_kerja_bulan"(ID_PEGAWAI, to_date(sysdate,'dd/mm/yyyy')) as VARCHAR2(50)) || ' Bulan ' ||

CAST("fn_kerja_hari"(ID_PEGAWAI, to_date(sysdate,'dd/mm/yyyy')) as VARCHAR2(50)) || ' Hari '

As Lama_Kerja

from pegawai;

Page 18: Basis Data Lanjut 1.5

Stored Procedure

SP_CONTOH_DATABASE

CREATE OR REPLACE Procedure SP_CONTOH_DATABASE

IS

BEGIN

--tabel bentuk Obat

Insert into Bentuk_Obat Values(1,'Pulvis','');

Insert into Bentuk_Obat Values(2,'Pulveres','');

Insert into Bentuk_Obat Values(3,'Tablet','');

Insert into Bentuk_Obat Values(4,'Pil','');

Insert into Bentuk_Obat Values(5,'Kapsul','');

Insert into Bentuk_Obat Values(6,'Kaplet','');

Insert into Bentuk_Obat Values(7,'Larutan','');

Insert into Bentuk_Obat Values(8,'Suspensi','');

Insert into Bentuk_Obat Values(9,'Emulsi','');

Insert into Bentuk_Obat Values(10,'Galenik','');

Insert into Bentuk_Obat Values(11,'Ekstrak','');

Insert into Bentuk_Obat Values(12,'Infusa','');

Insert into Bentuk_Obat Values(13,'Imunoserum','');

Insert into Bentuk_Obat Values(14,'Salep','');

Insert into Bentuk_Obat Values(15,'Suppositoria','');

Insert into Bentuk_Obat Values(16,'Obat tetes','');

--tabel golongan obat

INSERT into GOLONGAN_OBAT Values(1,'OB','Obat Bebas');

INSERT into GOLONGAN_OBAT Values(2,'OBT','Obat Bebas Terbatas');

INSERT into GOLONGAN_OBAT Values(3,'OK','Obat Keras');

---------------------------------------------------------------

--Tabel Pegawai

--0XXXX (Tetap) 1XXXXX (Tidak Tetap)

INSERT into Pegawai

Values('00001','John Krasus','Jalan Dinoyo 3/5','081678902',"TO_DATE"('03/11/2005',

'mm/dd/yyyy'),1250000,null);

INSERT into Pegawai

Values('00002','Shiva Saracehan','Jalan Diponegoro II/2','088332200',"TO_DATE"('02/17/2005',

'mm/dd/yyyy'),1450000,null);

INSERT into Pegawai

Values('00003','Titik','Jalan Holahola 3/13','08967325',"TO_DATE"('01/19/2005', 'mm/dd/yyyy'),1650000,null);

INSERT into Pegawai

Values('10001','Lola','Jalan Mentari II/3','08967334',"TO_DATE"('01/02/2007', 'mm/dd/yyyy'),null,50000);

INSERT into Pegawai

Values('10002','CeceNi','Jalan Umum 3/12','082324511',"TO_DATE"('08/01/2007', 'mm/dd/yyyy'),null,50000);

-------------------------------------------------------------------------

--TABEL Pelanggan

INSERT into Pelanggan

Values ('P00001','Nadia Aini','Jalan JemurSari','031-84990952');

INSERT into Pelanggan

Values ('P00002','Refi Syahmudin','Jalan SariJemur','031-8495351');

INSERT into Pelanggan

Values ('P00003','Bapak Trio','Jalan Tidar','081592939');

INSERT into Pelanggan

Values ('P00004','Ibu Tri','Jalan Mengganti','0819999');

-------------------------------------------------------------------------

--TABEL SUPPLIER

INSERT into SUPPLIER

VALUES ('001','PT.Kcimia Farma','Jalan Tambungan Jakarta','021-567123');

INSERT into SUPPLIER

VALUES ('002','PT.Cholrin Sun Jaya','Jalan Merak Medan','071-321001');

Page 19: Basis Data Lanjut 1.5

INSERT into SUPPLIER

VALUES ('003','PT.Surya Indah Farma','Jalan Mendet Jakarta','021-567122');

-------------------------------------------------------------------------

--TABEL OBAT

--GENERIK

--

(ID_OBAT,ID_BENTUK,ID_GOLONGAN,NAMA_OBAT,KHASIAT_OBAT,HARGA_JUAL,SATUAN,ST

ATUS,STATUS_OBAT,

--KADALURASA,KODE_PATEN,KODE_GENERIK)

--GENERIK (to_date('12/03/2006','mm/dd/yyyy'));

INSERT into OBAT

VALUES('G000001',4,1,'Parasetamol','Demam,Nyeri',12000,'Kaplet',1,"TO_DATE"('30/04/2011',

'dd/mm/yyyy'),null,'GX1111');

INSERT into OBAT

VALUES('G000002',3,1,'Asetosal','Sakit Kepala',13000,'Kaplet',1,"TO_DATE"('02/1/2012', 'mm/dd/yyyy')

,null,'GX11112');

INSERT into OBAT

VALUES('G000003',6,1,'Amoksisilin','Anti Infeksi',12000,'Sashet',1,"TO_DATE"('05/10/2011',

'mm/dd/yyyy'),null,'GX11113');

INSERT into OBAT

VALUES('G000004',5,1,'Ergotamin','Anti Migrain',22000,'Biji',1,null,null,'GX11114');

--PATEN(MEREK)

INSERT into OBAT

VALUES('P000001',5,1,'Ultra Flu','Anti Migrain',5000,'Sachet',1,null,'PX11112',null);

INSERT into OBAT

VALUES('P000002',5,1,'Incidal','Anti Alergi',2500,'Biji',1,null,'PX11112',null);

INSERT into OBAT

VALUES('P000003',5,1,'Komix','Batuk',7500,'Kaplet',1,null,'PX11113',null);

-------------------------------------------------------------------------

--TABEL PEMBELIAN

--pembelian#1

INSERT into PEMBELIAN VALUES('BU-00-0001','001','00001',"TO_DATE"('3/10/2011',

'mm/dd/yyyy'),'Pembelian cash');

--TABEL DETAIL PEMBELIAN

INSERT into DETAIL_PEMBELIAN

(NUM_PEMBELIAN,ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES (SQ_DETAIL_PEMBELIAN.nextval, 'BU-00-0001','G000001',100,10000);

INSERT into DETAIL_PEMBELIAN

(NUM_PEMBELIAN,ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES (SQ_DETAIL_PEMBELIAN.nextval,'BU-00-0001','G000002',50,12000);

INSERT into DETAIL_PEMBELIAN

(NUM_PEMBELIAN,ID_PEMBELIAN,ID_OBAT,JUMLAH_PEMBELIAN,HARGA_SATUAN)

VALUES (SQ_DETAIL_PEMBELIAN.nextval,'BU-00-0001','P000001',75,4000);

--Penambahan stok OBAT (contoh AWAL)

INSERT into STOK_OBAT (NUMBERING,ID_OBAT,JUMLAH_STOK)

VALUES(SQ_STOK_OBAT.NEXTVAL,'G000001',100);

INSERT into STOK_OBAT (NUMBERING,ID_OBAT,JUMLAH_STOK)

VALUES(SQ_STOK_OBAT.NEXTVAL,'G000002',50);

INSERT into STOK_OBAT (NUMBERING,ID_OBAT,JUMLAH_STOK)

VALUES(SQ_STOK_OBAT.NEXTVAL,'P000001',75);

END;

SP_DELETE_ALL_RECORD

CREATE OR REPLACE Procedure sp_delete_all_record

IS

BEGIN

DELETE From Bentuk_Obat;

DELETE From Detail_Pembelian;

DELETE From Detail_Penjualan;

Page 20: Basis Data Lanjut 1.5

DELETE From Golongan_Obat;

DELETE From Obat;

DELETE From Pegawai;

DELETE From Pelanggan;

DELETE From Pembelian;

DELETE From Penjualan;

DELETE From Stok_Obat;

DELETE From Supplier;

END;

Function

FN_KERJA_TAHUN

CREATE OR REPLACE

FUNCTION "fn_kerja_tahun" (id_pegawai IN VARCHAR2, date_now IN DATE)

RETURN int

AS

tahun1 int;

tahun2 int;

tgl DATE;

hari INT;

bulan1 int;

bulan2 int;

hari1 int;

hari2 int;

id_nya VARCHAR2(20):=id_pegawai;

BEGIN

SELECT TGL_MASUK_PEGAWAI into tgl FROM PEGAWAI WHERE ID_PEGAWAI=id_nya;

tahun1:=to_char(tgl,'YYYY');

bulan1:=to_char(tgl,'mm');

hari1:=to_char(tgl,'dd');

tahun2:=to_char(date_now,'YYYY');

bulan2:=to_char(date_now,'mm');

hari2:=to_char(date_now,'DD');

IF (tahun2 <= tahun1) THEN

hari:=0;

ELSE

IF (bulan2 > bulan1) THEN

hari:=tahun2-tahun1;

ELSE

hari:=(tahun2-tahun1)-1;

END IF;

END IF;

RETURN hari;

END;

FN_KEJA_BULAN

CREATE OR REPLACE

FUNCTION "fn_kerja_bulan" (id_pegawai IN VARCHAR2, date_now IN DATE)

RETURN int

AS

tahun1 int;

tahun2 int;

tgl DATE;

hari INT;

Page 21: Basis Data Lanjut 1.5

bulan1 int;

bulan2 int;

hari1 int;

hari2 int;

id_nya VARCHAR2(20):=id_pegawai;

BEGIN

SELECT TGL_MASUK_PEGAWAI into tgl FROM PEGAWAI WHERE ID_PEGAWAI=id_nya;

tahun1:=to_char(tgl,'YYYY');

bulan1:=to_char(tgl,'mm');

hari1:=to_char(tgl,'dd');

tahun2:=to_char(date_now,'YYYY');

bulan2:=to_char(date_now,'mm');

hari2:=to_char(date_now,'DD');

IF (tahun2 <= tahun1) THEN

hari:=0;

ELSE

IF (bulan2 > bulan1) THEN

IF (hari2 > hari1) THEN

hari:=bulan2-bulan1;

ELSE

hari:=(bulan2-bulan1)-1;

END IF;

ELSE

IF (hari2 >= hari1) THEN

hari:=(tahun1+12)-tahun2;

ELSE

hari:=(tahun1+12)-tahun2-1;

END IF;

--hari:=(tahun2-tahun1)-1;

END IF;

END IF;

RETURN hari;

END;

FN_KERJA_HARI

CREATE OR REPLACE

FUNCTION "fn_kerja_hari" (id_pegawai IN VARCHAR2, date_now IN DATE)

RETURN int

AS

tahun1 int;

tahun2 int;

tgl DATE;

hari INT;

bulan1 int;

bulan2 int;

hari1 int;

hari2 int;

id_nya VARCHAR2(20):=id_pegawai;

BEGIN

SELECT TGL_MASUK_PEGAWAI into tgl FROM PEGAWAI WHERE ID_PEGAWAI=id_nya;

tahun1:=to_char(tgl,'YYYY');

bulan1:=to_char(tgl,'mm');

hari1:=to_char(tgl,'dd');

Page 22: Basis Data Lanjut 1.5

tahun2:=to_char(date_now,'YYYY');

bulan2:=to_char(date_now,'mm');

hari2:=to_char(date_now,'DD');

IF (tahun2 <= tahun1) THEN

hari:=0;

ELSE

IF (hari2 >= hari1) THEN

hari:=hari2-hari1;

ELSE

hari:=(hari2+30)-hari1;

END IF;

END IF;

RETURN hari;

END;

TRIGGER

TG_UPDATE_STOKOBAT

CREATE OR REPLACE TRIGGER "ERFAN"."tg_update_stokobat" AFTER INSERT ON

"ERFAN"."DETAIL_PENJUALAN" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW

BEGIN

UPDATE STOK_OBAT SET JUMLAH_STOK=JUMLAH_STOK-:new.JUMLAH_BARANG;

END;

ALTER TRIGGER "ERFAN"."tg_update_stokobat" ENABLE

TG_INSERT_STOKOBAT

CREATE OR REPLACE TRIGGER "ERFAN"."tg_insert_stokobat" AFTER INSERT ON

"ERFAN"."DETAIL_PEMBELIAN" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW

DECLARE

cek number;

BEGIN

SELECT COUNT(*) into CEK FROM STOK_OBAT

WHERE STOK_OBAT.ID_OBAT=:NEW.ID_OBAT;

IF cek=0 THEN

INSERT into STOK_OBAT

VALUES(SQ_STOK_OBAT.NEXTVAL,:NEW.ID_OBAT,:NEW.JUMLAH_PEMBELIAN);

ELSE

UPDATE STOK_OBAT SET JUMLAH_STOK=JUMLAH_STOK+:NEW.JUMLAH_PEMBELIAN

WHERE STOK_OBAT.ID_OBAT=:NEW.ID_OBAT;

END IF;

END;

ALTER TRIGGER "ERFAN"."tg_insert_stokobat" ENABLE

Page 23: Basis Data Lanjut 1.5

PACKAGE

PK_APOTEK

CREATE OR REPLACE

PACKAGE pk_apotek AS

PROCEDURE insert_golongan_obat

(

id_golongan NUMBER,

nama_gol VARCHAR2,

ket_gol VARCHAR2

);

PROCEDURE delete_golongan_obat

(

nama_gol VARCHAR2

);

end;

CREATE OR REPLACE

PACKAGE BODY "PK_APOTEK" AS

PROCEDURE DELETE_GOLONGAN_OBAT(NAMA_GOL IN VARCHAR2) AS

BEGIN

DELETE FROM GOLONGAN_OBAT

WHERE NAMA_GOLONGAN=DELETE_GOLONGAN_OBAT.NAMA_GOL;

END;

PROCEDURE INSERT_GOLONGAN_OBAT(ID_GOLONGAN IN NUMBER, NAMA_GOL IN

VARCHAR2, KET_GOL IN VARCHAR2) AS

BEGIN

INSERT INTO GOLONGAN_OBAT

VALUES(ID_GOLONGAN,NAMA_GOL,KET_GOL);

END;

END;

Page 24: Basis Data Lanjut 1.5

Kritik & Saran :

1. Lusi Susanti ( [email protected] )

2. Erfan Rachmad S ( [email protected] )