67
1. Bédard, Y. (1999), Visual Modelling Of Spatial Databases: Towards Spatial PVL and UML, GEOMATICA Vol. 53 No. 2.
2. Borges, K.A.V., Clodoveue A.D.Jr. and Alberto H.F.L. (2001), Integrity Constraints in Spatial Databases. Paper at http://delivery.acm.org/
10.1145/330000/320136/p1-borges.pdf.
3. Calkins, H.W. 2003, Entity-Relationship Modeling Of Spatial Data For
Geographic Information System, Paper at http://www.geo.unizh.ch/oai/spatialdb
4. Cyran, M. (2005), Oracle Database Concepts 10g Release 2 (10.2), Oracle Corporation, Redwood City-CA, USA.
5. Cockcroft, S. (1997), A Taxonomy of Spatial Data Integrity Constraints, Paper at http://divcom.otago.ac.nz:800/com/infosci.
6. Direktorat Jenderal Pajak (2000), KEP-533/PJ/2000 Tanggal 20 Desember 2000 tentang Petunjuk Pelaksanaan Pendaftaran, Pendataan dan Penilaian Objek dan Subjek Pajak Bumi dan Bangunan Dalam Rangka Pembentukan dan atau Pemeliharaan Basis Data Sistem Manajemen Informasi Objek Pajak (SISMIOP), Sekretariat Direktorat Jenderal Pajak, Jakarta.
7. de By, R.A. (2000), Principles of Geographic Information Systems, The International Institute for Aerospace Survey and Earth Science (ITC), Enschede, The Netherlands.
8. Escobar, F., G. Hunter, I. Bishop and A Zerger. 2006. Introduction to GIS, http://www.sli.unimelb.edu.au/gisweb
9. Elmasri, R., and Navathe, S. B. (2000), Fundamentals of Database System.
The Benjamin/Cummings Company, California,USA.
10. Fathansyah (2004), Sistem Basis Data. Informatika, Bandung.
11. Güting, R.H. (1994), An Introduction to Spatial Database Systems, VLDB Journal. 3(4), Oktober 1994.
12. Howe, D.R. (1991), Data Analysis for Database Design, Edward Arnold, London, UK.
13. Laudon, K.C. and Jane P.L. (2002), Management Information Systems, Prentice Hall, New Jersey, USA.
14. Laurini, R. and Derek T. (1993), Fundamental of Spatial Information
Systems, Academic Press, London, UK.
68
15. Lo, C. P. and A.K.W. Yeung (2002), Concepts and Techniques of Geographic Information Systems, Prentice Hall of India Private Limited, New Delhi, India.
16. Loney, K. (2004), Oracle Database 10g : The Complete Referenc. McGraw- Hill/Osborne, New York, USA.
17. Meadows, C. and Sushil J. (1995), Integrity in Multilevel Secure Database Management Systems, dalam Information Security: An Integrated Collection of Essays, IEEE Computer Society Press, Los Alamitos, CA USA.
18. Murray, C. (2005), Oracle Spatial User’s Guide and Reference, 10g Release 2(10.2), Oracle Corporation, Redwood City-CA, USA.
19. Nugroho, A. (2004), Konsep Pengembangan Sistem Basis Data, Informatika, Bandung.
20. Prahasta, E. (2002), Konsep-konsep Dasar Sistem Informasi Geografis.
Informatika, Bandung.
21. Rigaux, P., Michel S. and Agnes V. (2002), Spatial Databases With Application to GIS, Morgan Kaufman Publishers, San Francisco, USA
22. Santoso, B. (2005), Pengembangan Interoperabilitas Basis Data PBB dan BPN, Tesis Program Pasca Sarjana Universitas Gajah Mada, Yogyakarta.
23. Shekhar,S. and Sanjay C. (2003) Spatial Databases: A Tour, Prentice Hall.
New Jersey, USA.
24. Shiberschatz, A. et al. (2002), Database System Concepts, McGraw-Hill Co. New York, USA.
25. Sugiada, I.M. (2007), Peningkatan Keamanan Basis Data Spasial PBB Melalui Rancang Ulang Basis Data Spasial, Tesis Program Magister Teknik Geodesi dan Geomatika, FTSL-ITB, Bandung.
26. Waljiyanto (2000), Sistem Basis Data : Analisis dan Pemodelan Data. J & J Learning, Yogyakarta
27. Wikipedia (2007), Data Integrity, http://en.wikipedia.org
69 1. Daftar Entitas
No. Nama Entitas Atribut
1 Propinsi Kd_Prop, Lyr_Prop 2 Kota Kd_Kota , Lyr_Kota 3 Kecamatan Kd_Kec , Lyr_Kec 4 Kelurahan Kd_Kelurahan , Lyr_Kel 5 Blok Kd_Blok , Lyr_Blok
6 Bidang No_Urut , Kd_Jns_Op , Lyr_Bidang 7 Bangunan No_Bng , Lyr_Bng
8 Jalan Id_Jln , Nm_Jln, Lbr_Jln, Lyr_Jln
9 Sungai Id_ Sungai , Nm_ Sungai, Lbr_Sungai, Lyr_ Sungai 10 Simbol Id_ Simbol, Lyr_ Simbol
11 Zona_Proyeksi No_Zona , Nm_Zona 12 Pemakai_SIG NIP_Petugas
12 Wewenang_SIG KD_Wwg, Nm_Wwg
Keterangan: Atribut yang digarisbawahi merupakan kunci/key dari entitasnya
2. Daftar Atribut dan Batasannya
No Nama Tipe Data
Panjang Keberadaan Batasan Lainnya
1 Kd_Prop C (2) M -
2 Lyr_Prop Geometri M Bentuk geometri berupa polygon
3 Kd_Kota C (2) M -
4 Lyr_Kota Geometri M Bentuk geometri berupa polygon
5 Kd_Kec C (3) M -
6 Lyr_Kec Geometri M Bentuk geometri berupa polygon
7 Kd_Kel C (3) M -
8 Lyr_Kel Geometri M Bentuk geometri berupa polygon
9 Kd_Blok C (3) M -
10 Lyr_Blok Geometri M Bentuk geometri berupa polygon
11 No_Urut C (4) M -
12 Kd_Jns_Op C (1) M -
13 Lyr_Bidang Geometri M Bentuk geometri berupa polygon
14 No_Bng C (3) M -
15 Lyr_Bng Geometri M Bentuk geometri berupa polygon
16 Id_Jln N (5) M -
17 Lbr_Jln N 93) O -
16 Nm_Jln C (30) M -
19 Lyr_Jln Geometri M Bentuk geometri berupa polyline
20 Id_Sungai N (5) M -
70
No Nama Tipe Data
Panjang Keberadaan Batasan Lainnya
21 Nm_Sungai C (30) M -
22 Lbr_Sungai N (3) O -
23 Lyr_Sungai Geometri M Bentuk geometri berupa polyline
24 Kd_Simbol C (3) M -
25 Lyr_Simbol Geometri M Bentuk geometri berupa point
26 Nm_Zona C (30) M -
27 No_Zona C (5) M -
28 NIP_Petugas C (9) M -
29 Kd_Wwg C(2) M -
30 Nm_Wwg C (30) M -
Keterangan
Tipe Data : C=Character, N=Number, D=Date, Geometri digunakan untuk data spasial
Keberadaan : M=Mandatory, O=Optional
3. Daftar Relasi Entitas
No Entitas Nama
Relasi Keterangan
Ke-1 Ke-2
1 Propinsi Kota Memiliki
Data kota harus berada di dalam propinsi dimana kota tersebut berada baik data atribut (kode) maupun data spasialnya
2 Kota Kecamatan Memiliki
Data kecamatan harus berada di dalam kota dimana kecamatan tersebut berada baik data atribut (kode) maupun data spasialnya
3 Kecamatan Kelurahan Memiliki
Data kelurahan harus berada di dalam kecamatan dimana kelurahan tersebut berada baik data atribut (kode) maupun data spasialnya
4 Kelurahan Blok Memiliki
Data Blok harus berada di dalam kelurahan dimana blok tersebut berada baik data atribut maupun data spasialnya 5 Sungai Kelurahan Berada Pada Data spasial sungai harus berada pada
kelurahan dimana sungai tersebut berada 6 Jalan Kelurahan Berada Pada Data jalan sungai harus berada pada
kelurahan dimana jalan tersebut berada 7 Simbol Kelurahan Berada Pada Data spasial simbol harus berada pada
kelurahan dimana simbol tersebut berada 8 Blok Bidang Terdapat Data bidang harus berada di dalam blok
dimana bidang tersebut berada baik data atribut maupun data spasialnya
9 Bidang Bangunan Terdapat Data bangunan harus berada di dalam bidang dimana bangunan tersebut berada baik data atribut maupun data spasialnya
71
Daftar Tabel dan Deskripsi Attribut dibuat dengan tujuan untuk menjelaskan secara detail setiap attribut yang ada dalam tabel yang saling berhubungan dalam perancangan data model.
1. Daftar Tabel dan Deskripsi Kolom/Kolom a. Tabel PROPINSI
Tabel yang menyimpan data batas propinsi
No. Nama Kolom Type Key Null ? Deskripsi 1. KD_PROP Char(2) Kode Propinsi
2. LYR_PROP SDO_Geometry Data Geometri Wilayah Propinsi
b. Tabel KOTA
Tabel yang menyimpan data batas kabupaten/Kota
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_KOTA Char(2) Kode Kabupaten/Kota
3. LYR_KOTA SDO_Geometry Data Geometri Wilayah Kabupaten/Kota
c. Tabel KECAMATAN
Tabel yang menyimpan data batas kecamatan
No. Nama Kolom Tipe Key Null ? Deskripsi 1. KD_PROP Char(2) Kode Propinsi 2. KD_ KOTA Char(2) Kode Kabupaten/Kota 3. KD_KEC Char(3) Kode Kecamatan
4. LYR_KEC SDO_Geometry Data Geometri Wilayah Kecamatan
72
d. Tabel KELURAHAN
Tabel yang menyimpan data batas kelurahan
No. Nama Kolom Tipe Key Null ? Deskripsi 1. KD_PROP Char(2) Kode Propinsi 2. KD_ KOTA Char(2) Kode Kabupaten/Kota 3. KD_KEC Char(3) Kode Kecamatan 4. KD_KEL Char(3) Kode Kelurahan/desa
5. LYR_KEL SDO_Geometry Data Geometri Wilayah Kelurahan
e. Tabel BLOK
Tabel yang menyimpan data batas blok
No. Nama Kolom Tipe Key Null ? Deskripsi 1. KD_PROP Char(2) Kode Propinsi 2. KD_ KOTA Char(2) Kode Kabupaten/Kota 3. KD_KEC Char(3) Kode Kecamatan 4. KD_KEL Char(3) Kode Kelurahan/desa 5. KD_BLOK Char(3) Kode Blok
6. LYR_BLOK SDO_Geometry Data Geometri Area Blok
f. Tabel BIDANG
Tabel yang menyimpan data bidang
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. KD_KEC Char(3) Kode Kecamatan
4. KD_KEL Char(3) Kode Kelurahan/desa
5. KD_BLOK Char(3) Kode Blok
6. NO_URUT Char(4) Nomor Urut Objek Pajak 7. KD_JNS_OP Char(1) Kode Jenis Objek Pajak 8. NIP_PETUGAS Char(9) NIP Petugas Entri Data 9. TGL_ENTRI_BIDANG Date Tanggal Entri Data Bidang 10. LYR_BIDANG SDO_Geometry Data Geometri Bidang
g. Tabel BANGUNAN
Tabel yang menyimpan data bangunan
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. KD_KEC Char(3) Kode Kecamatan
4. KD_KEL Char(3) Kode Kelurahan/desa
5. KD_BLOK Char(3) Kode Blok
6. NO_URUT Char(4) Nomor Urut Objek Pajak 7. KD_JNS_OP Char(1) Kode Jenis Objek Pajak
8. NO_BNG Char(3) Nomor Urut Bangunan
9. NIP_PETUGAS Char(9) NIP Petugas Entri Data 10. TGL_ENTRI_BNG Date Tanggal Entri Data Bidang 11. LYR_BNG SDO_Geometry Data Geometri Bangunan
h. Tabel JALAN
Tabel yang menyimpan data jalan
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. KD_KEC Char(3) Kode Kecamatan
4. KD_KEL Char(3) Kode Kelurahan/desa 5. ID_JLN Number(5) Nomor Identitas Jalan
6. NM_JLN VarChar(30) Nama Jalan
7. LBR_JLN Numbe(3) Lebar Jalan
8. LYR_JLN SDO_Geometry Data Geometri Jalan
i. Tabel ZONA_PROYEKSI
Tabel yang menyimpan data sistem proyeksi UTM dengan datum WGS84 beserta zonanya untuk tiap kabupaten/kota
No. Nama Kolom Tipe Key Null ? Deskripsi 1. KD_PROP Char(2) Kode Propinsi 2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. NO_ZONA Char(5) Nomor Sistem Proyeksi dan Zona 4. KET_ZONA VarChar(50) Keterangan Sistem Proyeksi dan Zona
74
j. Tabel SUNGAI
Tabel yang menyimpan data sungai
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. KD_KEC Char(3) Kode Kecamatan
4. KD_KEL Char(3) Kode Kelurahan/desa
5. ID_SUNGAI Number(5) Nomor Identitas Sungai 6. NM_SUNGAI VarChar(30) Nama Sungai
7. LBR_SUNGAI Number(3) Lebar Sungai 8. LYR_ SUNGAI SDO_Geometry Data Geometri Sungai
k. Tabel SIMBOL
Tabel yang menyimpan data simbol
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_PROP Char(2) Kode Propinsi
2. KD_ KOTA Char(2) Kode Kabupaten/Kota
3. KD_KEC Char(3) Kode Kecamatan
4. KD_KEL Char(3) Kode Kelurahan/desa
5. ID_SIMBOL Char(3) Nomor Identitas Simbol 5. KETERANGAN Varchar(50) Keterangan Mengenai Simbol 6. LYR_ SIMBOL SDO_Geometry Data Geometri Simbol
l. Tabel PEMAKAI_SIG
Tabel yang menyimpan data pemakai SIG PBB
No. Nama Kolom Tipe Key Null ? Deskripsi 1. NIP_PETUGAS Char(9) NIP Petugas
2. KD_ WWNG Char(2) Kode Wewenang
m. Tabel WEWENANG_SIG
Tabel yang menyimpan data wewenang pemakai SIG PBB
No. Nama Kolom Tipe Key Null ? Deskripsi
1. KD_ WWNG Char(9) Kode Wewenang
2. NM_ WWNG Char(2) Nama Wewenang
2. Daftar Hubungan Referensi (Foreign Key)
No Nama Tabel Induk Tabel Anak Kolom
1 PROP_KOTA Propinsi Kota - Kd_Prop
2 KOTA_KEC Kota Kecamatan - Kd_Prop
- Kd_Kota
3 KEC_KEL Kecamatan Kelurahan - Kd_Prop
- Kd_Kota - Kd_Kec
4 KEL_BLOK Kelurahan Blok - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel
5 BLOK_BIDANG Blok Bidang - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel - Kd_Blok
6 BIDANG_BNG Bidang Bangunan - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel - Kd_Blok - No_Urut - Kd_Jns_Op
7 KEL_JLN Kelurahan Jalan - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel
8 KEL_SUNGAI Kelurahan Sungai - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel 9 PEMAKAI_BIDANG Pemakai_SIG Bidang - NIP_Petugas 10 PEMAKAI_WWNG Wewenang_SIG Pemakai_SIG - Kd_Wwng 11 PEMAKAI_BNG Pemakai_SIG Bangunan - NIP_Petugas
12 SIMBOL_KEL Kelurahan Simbol - Kd_Prop
- Kd_Kota - Kd_Kec - Kd_Kel
76
LAMPIRAN C Tablespace
LAMPIRAN C.1 Daftar Tablespace Dan Penggunannya
No Nama Tablespace Objek
Jenis Nama
1 TS_DATSIG Tabel - BLOK
- JALAN - SIMBOL - SUNGAI 2 TSI_DATSIG Indek - BLOK_PK _IDX
- JALAN_PK_IDX - SIMBOL_PK_IDX - SUNGAI_PK_IDX - BLOK_ SPATIAL _IDX - JALAN_ SPATIAL _IDX - SIMBOL_ SPATIAL _IDX - SUNGAI_ SPATIAL _IDX
3 TS_REFSIG Tabel - PROPINSI
- KOTAK - KECAMATAN - KELURAHAN - REFSIMBOL - PEMAKAI_SIG - ZONA_PROYEKSI - WEWENANG 4 TSI_REFSIG Indek - PROPINSI_PK_IDX
- KOTA_PK_IDX
- KECAMATAN_PK_IDX - KELURAHAN_PK_IDX - REFSIMBOL_PK_IDX - PEMAKAI_SIG_PK_IDX - ZONA_PROYEKSI_PK_IDX - WEWENANG_PK_IDX - PROPINSI_SPATIAL_IDX - KOTA_ SPATIAL _IDX
- KECAMATAN_ SPATIAL _IDX - KELURAHAN_ SPATIAL _IDX
5 TS_BANGUNAN Tabel - BANGUNAN
6 TSI_BANGUNAN Indek - BANGUNAN_PK_IDX - BANGUNAN_ SPATIAL _IDX
7 TS_BIDANG Tabel - BIDANG
8 TSI_BIDANG Indek - BIDANG_PK_IDX - BIDANG_ SPATIAL _IDX
LAMPIRAN C. 2 Skrip Pembuatan Tablespace
-- Pembuatan tablespace TS_DATSIGdrop tablespace TS_DATSIG including contents cascade constraints;
create tablespace TS_DATSIG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_DATSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED;
-- Pembuatan tablespace TSI_DATSIG
drop tablespace TSI_DATSIG including contents cascade constraints;
create tablespace TSI_DATSIG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_DATSIG_01.ORA' size 10 reuse autoextend on next 2 maxsize UNLIMITED;
-- Pembuatan tablespace TS_REFSIG
drop tablespace TS_REFSIG including contents cascade constraints;
create tablespace TS_REFSIG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_REFSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED;
-- Pembuatan tablespace TSI_REFSIG
drop tablespace TSI_REFSIG including contents cascade constraints;
create tablespace TSI_REFSIG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_REFSIG_01.ORA' size 10 reuse autoextend on next 1 maxsize UNLIMITED;
-- Pembuatan tablespace TS_BIDANG
drop tablespace TS_BIDANG including contents cascade constraints;
create tablespace TS_BIDANG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_BIDANG_01.0RA' size 50 reuse autoextend on next 5 maxsize UNLIMITED;
-- Pembuatan tablespace TSI_BIDANG
drop tablespace TSI_BIDANG including contents cascade constraints;
create tablespace TSI_BIDANG
datafile 'D:\ORACLE\ORADATA\SISMIOP\TSI_BIDANG_01.ORA' size 50 reuse autoextend on next 5 maxsize UNLIMITED;
-- Pembuatan tablespace TS_BANGUNAN
drop tablespace TS_BANGUNAN including contents cascade constraints;
create tablespace TS_BANGUNAN
datafile 'D:\ORACLE\ORADATA\SISMIOP\TS_BANGUNAN_01.0RA' size 50 reuse autoextend on next 5 maxsize UNLIMITED;
-- Pembuatan tablespace TSI_BANGUNAN
drop tablespace TSI_BANGUNAN including contents cascade constraints;
create tablespace TSI_BANGUNAN
datafile 'D\ORACLE\ORADATA\SISMIOP\TSI_BANGUNAN_01.ORA', size 50 reuse autoextend on next 5 maxsize UNLIMITED;
78
LAMPIRAN D Beberapa Contoh Algoritma Trigger Data Spasial
1. Algoritma Pengecekan Representasi Objek Data Spasial
2. Algoritma Pengecekan Hubungan Spasial Objek Bidang dengan Objek Blok
80
3. Algoritma Pengecekan Hubungan Spasial Objek Bidang dengan Objek Jalan
4. Algoritma Pengecekan Hubungan Spasial antar Objek Bidang
82
LAMPIRAN E Skrip Pembuatan Basis Data
/*===================================================*/
/* DBMS name: ORACLE */
/* Created By: Sunaryo */
/* Created on: 04/01/2008 5:39:37 */
/*===================================================*/
/*===================================================*/
/* Table: PROPINSI /*===================================================*/
create table SIGPBB.PROPINSI ( KD_PROP CHAR(2) not null,
LYR_PROP MDSYS.SDO_Geometry not null, constraint PK_PROPINSI primary key (KD_PROP)) tablespace TS_REFSIG;
/*===================================================*/
/* Index: PROP_SPATIAL_IDX /*===================================================*/
create index SIGPBB.PROP_SPATIAL_IDX on SIGPBB.PROPINSI (LYR_PROP) tablespace TSI_REFSIG
indextype is mdsys.spatial_index;
/*===================================================*/
/* Table: REF_SIMBOL /*===================================================*/
create table SIGPBB.REF_SIMBOL ( KD_SIMBOL CHAR(2) not null, NM_SIMBOL VARCHAR2(30),
GAMBAR_SIMBOL BLOB,
constraint PK_REF_SIMBOL primary key (KD_SIMBOL)) tablespace TS_REFSIG;
/*===================================================*/
/* Table: WEWENANG_SIG
/*===================================================*/
create table SIGPBB.WEWENANG_SIG ( KD_WWNG CHAR(2) not null, NM_WWNG VARCHAR2(30),
constraint PK_WEWENANG_SIG primary key (KD_WWNG)) tablespace TS_REFSIG;
/*===================================================*/
/* Table: ZONA_PROYEKSI /*===================================================*/
create table SIGPBB.ZONA_PROYEKSI ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_ZONA NUMBER(5) not null, KET_ZONA VARCHAR(200),
constraint PK_ZONA_PROYEKSI primary key (KD_PROP, KD_KOTA, KD_ZONA))
tablespace TS_REFSIG;
/*===================================================*/
/* Table: KOTA
/*===================================================*/
create table SIGPBB.KOTA ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null,
LYR_KOTA MDSYS.SDO_Geometry not null,
constraint PK_KOTA primary key (KD_PROP, KD_KOTA), constraint FK_KOTA_PROP foreign key (KD_PROP) references SIGPBB.PROPINSI (KD_PROP)) tablespace TS_REFSIG;
/*===============================================*/
/* Index: KOTA_SPATIAL_IDX /*===============================================*/
create index SIGPBB.KOTA_SPATIAL_IDX on SIGPBB.KOTA (LYR_KOTA)tablespace TSI_REFSIG
indextype is mdsys.spatial_index;
/*===================================================*/
/* Table: PEMAKAI_SIG
/*===================================================*/
create table SIGPBB.PEMAKAI_SIG ( NIP_PETUGAS CHAR(9) not null, KD_WWNG CHAR(2) not null,
constraint PK_PEMAKAI_SIG primary key (NIP_PETUGAS), constraint FK_PEMAKAI_WWNG foreign key (KD_WWNG) references SIGPBB.WEWENANG_SIG (KD_WWNG)) tablespace TS_REFSIG;
/*===================================================*/
/* Index: PEMAKAI_WEWENANG_FK
/*===================================================*/
create index SIGPBB.PEMAKAI_WEWENANG_FK on SIGPBB.PEMAKAI_SIG (KD_WWNG ASC);
/*===================================================*/
/* Table: KECAMATAN
/*===================================================*/
create table SIGPBB.KECAMATAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null,
LYR_KEC MDSYS.SDO_Geometry not null,
constraint PK_KECAMATAN primary key (KD_PROP, KD_KOTA, KD_KEC), constraint FK_KEC_KOTA foreign key (KD_PROP, KD_KOTA)
references SIGPBB.KOTA (KD_PROP, KD_KOTA)) tablespace TS_REFSIG;
/*===================================================*/
/* Index: KEC_SPATIAL_IDX
/*===================================================*/
create index SIGPBB.KEC_SPATIAL_IDX on SIGPBB.KECAMATAN (LYR_KEC)tablespace TSI_REFSIG
indextype is mdsys.spatial_index;
84
/*=================================================*/
/* Table: KELURAHAN
/*=================================================*/
create table SIGPBB.KELURAHAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null,
TGL_ENTRI_KEL DATE default sysdate, LYR_KEL MDSYS.SDO_Geometry not null,
constraint PK_KELURAHAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL),
constraint FK_KEL_KEC foreign key (KD_PROP, KD_KOTA, KD_KEC) references SIGPBB.KECAMATAN (KD_PROP, KD_KOTA, KD_KEC)) tablespace TS_REFSIG;
/*================================================*/
/* Index: KEL_SPATIAL_IDX
/*================================================*/
create index SIGPBB.KEL_SPATIAL_IDX on SIGPBB.KELURAHAN (LYR_KEL)tablespace TSI_REFSIG
indextype is mdsys.spatial_index;
/*=================================================*/
/* Table: JALAN
/*=================================================*/
create table SIGPBB.JALAN (
KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_JLN NUMBER(5) not null, NM_JLN VARCHAR2(30),
LBR_JLN NUMBER(3),
LYR_JLN MDSYS.SDO_Geometry not null,
constraint PK_JALAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_JLN),
constraint FK_JALAN_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)
references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC,KD_KEL)) tablespace TS_DATSIG;
/*==============================================*/
/* Index: JALAN_SPATIAL_IDX
/*==============================================*/
create index SIGPBB.JALAN_SPATIAL_IDX on SIGPBB.JALAN (LYR_JLN)tablespace TSI_DATSIG
indextype is MDSYS.SPATIAL_INDEX;
/*==================================================*/
/* Table: SIMBOL
/*==================================================*/
create table SIGPBB.SIMBOL ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_SIMBOL CHAR(3) not null, KD_SIMBOL CHAR(2) not null,
KETERANGAN VARCHAR2(50) not null,
LYR_SIMBOL MDSYS.SDO_Geometry not null,
constraint PK_SIMBOL primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_SIMBOL),
constraint FK_SIMBOL_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)
references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL), constraint FK_SIMBOL_REFSIMBOL foreign key (KD_SIMBOL)
references SIGPBB.REF_SIMBOL (KD_SIMBOL)) tablespace TS_DATSIG;
/*==================================================*/
/* Index: SIMBOL_SPATIAL_IDX
/*==================================================*/
create index SIGPBB.SIMBOL_SPATIAL_IDX on SIGPBB.SIMBOL (LYR_SIMBOL)tablespace TSI_DATSIG
indextype is mdsys.spatial_idx;
/*===================================================*/
/* Table: SUNGAI
/*===================================================*/
create table SIGPBB.SUNGAI ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, ID_SUNGAI NUMBER(5) not null, NM_SUNGAI VARCHAR2(30),
LBR_SUNGAI NUMBER(3),
LYR_SUNGAI MDSYS.SDO_Geometry not null,
constraint PK_SUNGAI primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, ID_SUNGAI),
constraint FK_SUNGAI_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)
references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL) on delete cascade)
tablespace TS_DATSIG;
/*===================================================*/
/* Index: SUNGAI_SPATIAL_IDX
/*===================================================*/
create index SIGPBB.SUNGAI_SPATIAL_IDX on SIGPBB.SUNGAI (LYR_SUNGAI)tablespace TSI_DATSIG
indextype is MDSYS.SPATIAL_INDEX;
/*===============================================*/
/* Table: BLOK
/*===============================================*/
create table SIGPBB.BLOK (
KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null,
LYR_BLOK MDSYS.SDO_Geometry not null,
constraint PK_BLOK primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK),
constraint FK_BLOK_KEL foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)
86
references SIGPBB.KELURAHAN (KD_PROP, KD_KOTA, KD_KEC, KD_KEL)) tablespace TSI_DATSIG;
/*===================================================*/
/* Index: BLOK_SPATIAL_IDX
/*===================================================*/
create index SIGPBB.BLOK_SPATIAL_IDX on SIGPBB.BLOK (LYR_BLOK)tablespace TSI_DATSIG
indextype is MDSYS.SPATIAL_INDEX;
/*=================================================*/
/* Table: BIDANG
/*==================================================*/
create table SIGPBB.BIDANG (
KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null, NO_URUT CHAR(4) not null, KD_JNS_OP CHAR(1) not null, NIP_PETUGAS CHAR(9) not null,
TGL_ENTRI_BIDANG DATE default sysdate, LYR_BIDANG MDSYS.SDO_Geometry not null,
constraint PK_BIDANG primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP),
constraint FK_BIDANG_PEMAKAI foreign key (NIP_PETUGAS) references SIGPBB.PEMAKAI_SIG (NIP_PETUGAS),
constraint FK_BIDANG_BLOK foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK)
references SIGPBB.BLOK (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK))
tablespace TS_BIDANG;
/*===================================================*/
/* Index: PEMAKAI_BIDANG_FK
/*===================================================*/
create index SIGPBB.PEMAKAI_BIDANG_FK on SIGPBB.BIDANG (NIP_PETUGAS ASC)tablespace TSI_BIDANG;
/*==================================================*/
/* Index: BDG_SPATIAL_IDX
/*==================================================*/
create index SIGPBB.BDG_SPATIAL_IDX on SIGPBB.BIDANG (LYR_BIDANG ASC) tablespace TSI_BIDANG
indextype is MDSYS.SPATIAL_INDEX;
/*===================================================*/
/* Table: BANGUNAN
/*===================================================*/
create table SIGPBB.BANGUNAN ( KD_PROP CHAR(2) not null, KD_KOTA CHAR(2) not null, KD_KEC CHAR(3) not null, KD_KEL CHAR(3) not null, KD_BLOK CHAR(3) not null, NO_URUT CHAR(4) not null, KD_JNS_OP CHAR(1) not null, NO_BNG CHAR(3) not null,
NIP_PETUGAS CHAR(9) not null,
TGL_ENTRI_BNG DATE default sysdate,
LYR_BNG MDSYS.SDO_Geometry not null,
constraint PK_BANGUNAN primary key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP, NO_BNG), constraint FK_BANGUNAN_PEMAKAI foreign key (NIP_PETUGAS) references SIGPBB.PEMAKAI_SIG (NIP_PETUGAS),
constraint FK_BANGUNAN_BIDANG foreign key (KD_PROP, KD_KOTA, KD_KEC, KD_KEL, KD_BLOK, NO_URUT, KD_JNS_OP) references SIGPBB.BIDANG (KD_PROP, KD_KOTA, KD_KEC, KD_KEL,
KD_BLOK, NO_URUT, KD_JNS_OP) on delete cascade)
tablespace ts_bangunan;
/*===============================================*/
/* Index: PEMAKAI_BNG_FK
/*===============================================*/
create index SIGPBB.PEMAKAI_BNG_FK on SIGPBB.BANGUNAN (NIP_PETUGAS ASC)tablespace TSI_BANGUNAN;
/*=================================================*/
/* Index: BNG_SPATIAL_IDX
/*=================================================*/
create index SIGPBB.BNG_SPATIAL_IDX on SIGPBB.BANGUNAN (LYR_BNG)tablespace TSI_BANGUNAN
indextype is MDSYS.SPATIAL_INDEX;
88
LAMPIRAN F Skrip Pembuatan Triggers
/* Trigger TIUBS_PROPINSI pada tabel propinsi dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER tiubs_propinsi BEFORE INSERT OR UPDATE
ON sigpbb.propinsi FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_id VARCHAR2 (5);
BEGIN
IF :NEW.kd_prop IS NOT NULL THEN
var_id := :NEW.kd_prop;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_prop, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri propinsi ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_KOTA pada tabel kota dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER tiubs_kota BEFORE INSERT OR UPDATE OF lyr_kota ON sigpbb.kota
FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_id VARCHAR2 (10);
var_pro VARCHAR2 (10);
-- Deklarasi cursor data spasial tabel kecamatan CURSOR cek_lyr_prop (var_kd_prop VARCHAR) IS SELECT lyr_prop
FROM propinsi
WHERE kd_prop = var_kd_prop;
BEGIN
-- "Kota/kabupaten harus mempunyai hubungan INSIDE atau COVEREDBY dengan propinsi "
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL THEN
var_id := :NEW.kd_prop || :NEW.kd_kota;
var_pro := :NEW.kd_prop;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_kota, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri kota ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kota);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_prop (:NEW.kd_prop);
FETCH cek_lyr_prop INTO var_geo;
FOUND := cek_lyr_prop%FOUND;
CLOSE cek_lyr_prop;
-- Cek relasi spasial kota/kabupaten dengan propinsi
var_relation := sdo_geom.relate (:NEW.lyr_kota, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20002;
errmsg := 'Wilayah propinsi ' || var_pro || ' tidak ada. Tidak bisa insert atau update objek kota/kabupaten';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20003;
90
errmsg := 'Kota/kabupaten ' || var_id || ' tidak berada pada wilayah propinsi yang benar';
RAISE integrity_error;
END IF;
END IF;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_KECAMATAN pada tabel kecamatan dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER tiubs_kecamatan BEFORE INSERT OR UPDATE OF lyr_kec ON sigpbb.kecamatan
FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_id VARCHAR2 (20);
var_kt VARCHAR2 (20);
-- Deklarasi cursor data spasial tabel kecamatan
CURSOR cek_lyr_kota (var_kd_prop VARCHAR, var_kd_kota VARCHAR) IS SELECT lyr_kota
FROM kota
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota;
BEGIN
-- "Kecamatan harus mempunyai hubungan INSIDE atau COVEREDBY dengan kota/kabupaten "
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL
THEN
var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec;
var_kt := :NEW.kd_prop || :NEW.kd_kota;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_kec, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri kecamatan ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kec);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_kota (:NEW.kd_prop, :NEW.kd_kota);
FETCH cek_lyr_kota INTO var_geo;
FOUND := cek_lyr_kota%FOUND;
CLOSE cek_lyr_kota;
-- Cek relasi spasial kecamatan dengan kota/kabupaten
var_relation := sdo_geom.relate (:NEW.lyr_kec, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20002;
errmsg := 'Wilayah kota '|| var_kt|| ' tidak ada. Tidak bisa insert atau update objek kecamatan';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20003;
errmsg := 'Objek kecamatan ' || var_id || ' tidak berada pada wilayah kota/kabupaten yang benar';
RAISE integrity_error;
END IF;
END IF;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_KELURAHAN pada tabel kelurahan dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER sigpbb.tiubs_kelurahan BEFORE INSERT OR UPDATE OF lyr_kel
ON sigpbb.kelurahan FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
92
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_id VARCHAR2 (25);
var_kec VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kecamatan CURSOR cek_lyr_kec (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR) IS SELECT lyr_kec
FROM kecamatan
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec;
BEGIN
-- "Kelurahankecamatan harus mempunyai hubungan INSIDE atau COVEREDBY dengan kecamatan "
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL THEN
var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
var_kec := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_kel, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri kelurahan ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_kel);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_kec (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec);
FETCH cek_lyr_kec INTO var_geo;
FOUND := cek_lyr_kec%FOUND;
CLOSE cek_lyr_kec;
-- Cek relasi spasial kelurahan dengan kecamatan
var_relation := sdo_geom.relate (:NEW.lyr_kel, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20002;
errmsg := 'Wilayah kecamatan '|| var_kec|| ' tidak ada. Tidak bisa insert/update objek kelurahan';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20003;
errmsg := 'Posisi objek kelurahan '|| var_id || ' tidak berada pada kecamatan yang benar';
RAISE integrity_error;
END IF;
END IF;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_BLOK pada tabel blok dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER tiubs_blok BEFORE INSERT OR UPDATE OF lyr_blok ON sigpbb.blok
FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_cek_geo VARCHAR2 (255);
var_id VARCHAR2 (25);
var_kel VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR )
IS SELECT b.lyr_kel FROM kelurahan b
WHERE b.kd_prop = var_kd_prop AND b.kd_kota = var_kd_kota AND b.kd_kec = var_kd_kec AND b.kd_kel = var_kd_kel;
BEGIN
-- "Blok harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL
THEN
94
var_id := :NEW.kd_prop|| :NEW.kd_kota|| :NEW.kd_kec ||:NEW.kd_kel||
:NEW.kd_blok;
var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_blok, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri blok ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_blok);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah ';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
FETCH cek_lyr_kel INTO var_geo;
FOUND := cek_lyr_kel%FOUND;
CLOSE cek_lyr_kel;
-- Cek relasi spasial blok dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_blok, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20002;
errmsg := 'Wilayah kelurahan ' || var_kel || ' tidak ada. Tidak bisa insert atau update objek blok';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20003;
errmsg := 'Blok ' || var_id || ' tidak berada pada wilayah kelurahan yang benar';
RAISE integrity_error;
END IF;
END IF;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_BIDANG pada tabel bidang dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER sigpbb.tiubs_bidang BEFORE INSERT OR UPDATE
ON sigpbb.bidang FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_relation VARCHAR2 (255);
var_geo SDO_GEOMETRY;
var_cek NUMBER (1);
var_id VARCHAR2 (25);
var_blok VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel blok
CURSOR cek_lyr_blok (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR, var_kd_blok VARCHAR ) IS SELECT lyr_blok
FROM blok
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel
AND kd_blok = var_kd_blok;
-- -- Deklarasi cursor data spasial tabel jalan
CURSOR cek_lyr_jln (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR )
IS SELECT lyr_jln FROM jalan
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel;
-- -- Deklarasi cursor data spasial tabel sungai CURSOR cek_lyr_sg (
var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_sungai
FROM sungai
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel;
BEGIN
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL AND :NEW.no_urut IS NOT NULL AND :NEW.kd_jns_op IS NOT NULL
THEN
var_id := :NEW.kd_prop|| :NEW.kd_kota|| :NEW.kd_kec|| :NEW.kd_kel||
:NEW.kd_blok|| :NEW.no_urut|| :NEW.kd_jns_op;
var_blok := :NEW.kd_prop || :NEW.kd_kota|| :NEW.kd_kec|| :NEW.kd_kel||
:NEW.kd_blok;
96
- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_bidang, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri bidang ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_bidang);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat salah dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
-- "Bidang harus mempunyai hubungan INSIDE atau COVEREDBY dengan Blok"
-- ====================================================
OPEN cek_lyr_blok (:NEW.kd_prop, :NEW.kd_kota,:NEW.kd_kec,:NEW.kd_kel, :NEW.kd_blok );
FETCH cek_lyr_blok INTO var_geo;
FOUND := cek_lyr_blok%FOUND;
CLOSE cek_lyr_blok;
-- Cek relasi spasial bidang dengan blok
var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20003;
errmsg := 'Blok ' || var_blok || ' tidak ada. Tidak bisa update objek bidang';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20004;
errmsg := 'Bidang ' || var_id || ' tidak berada pada blok yang benar';
RAISE integrity_error;
END IF;
END IF;
-- ====================================================
-- "Bidang tidak boleh berpotongan/OVERLAP dengan Jalan"
-- ====================================================
OPEN cek_lyr_jln (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
LOOP
FETCH cek_lyr_jln INTO var_geo;
EXIT WHEN cek_lyr_jln%NOTFOUND;
var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005);
IF var_relation LIKE 'OVERLAP%' THEN
errno := -20004;
errmsg := 'Bidang '|| var_id ||' tidak boleh berpotongan/overlap dengan Jalan';
RAISE integrity_error;
END IF;
END LOOP;
CLOSE cek_lyr_jln;
-- =================================================
-- "Bidang tidak boleh berpotongan/OVERLAP dengan Sungai"
-- ====================================================
OPEN cek_lyr_sg (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
LOOP
FETCH cek_lyr_sg INTO var_geo;
EXIT WHEN cek_lyr_sg%NOTFOUND;
var_relation := sdo_geom.relate (:NEW.lyr_bidang, 'determine', var_geo, 0.005);
IF var_relation LIKE 'OVERLAP%' THEN
errno := -20004;
errmsg := 'Bidang '||var_id||' tidak boleh berpotongan/overlap dengan Sungai';
RAISE integrity_error;
END IF;
END LOOP;
CLOSE cek_lyr_sg;
-- =====================================================
-- "Cek relasi bidang dengan bidang (jika 0 ok, 1 ada yg overlap)"
-- ===================================================
var_cek := cek_rel_antar_bidang (:NEW.kd_prop,:NEW.kd_kota,:NEW.kd_kec, :NEW.kd_kel,:NEW.kd_blok,:NEW.no_urut,:NEW.kd_jns_op, :NEW.lyr_bidang );
IF var_cek = 1 THEN
errno := -20005;
errmsg := 'Bidang '||var_id ||' tidak boleh berpotongan/OVERLAP dengan bidang lainnya';
RAISE integrity_error;
END IF;
-- ===================================================
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_BANGUNAN pada tabel bangunan dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER sigpbb.tiubs_bangunan BEFORE INSERT OR UPDATE OF lyr_bgn
ON sigpbb.bangunan
98
FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_relation VARCHAR2 (255);
var_cek_geo VARCHAR2 (255);
var_geo SDO_GEOMETRY;
var_id VARCHAR2 (25);
var_nop VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel blok
CURSOR cek_lyr_bidang ( var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR, var_kd_blok VARCHAR, var_no_urut VARCHAR, var_kd_jns_op VARCHAR )
IS SELECT lyr_bidang FROM bidang
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel AND kd_blok = var_kd_blok AND no_urut = var_no_urut AND kd_jns_op = var_kd_jns_op;
BEGIN
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.kd_blok IS NOT NULL AND :NEW.no_urut IS NOT NULL AND :NEW.kd_jns_op IS NOT NULL AND :NEW.no_bgn IS NOT NULL THEN
var_id := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel ||
:NEW.kd_blok || :NEW.no_urut|| :NEW.kd_jns_op || :NEW.no_bgn;
var_nop :=:NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel ||
:NEW.kd_blok || :NEW.no_urut|| :NEW.kd_jns_op;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_bgn, 3);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri bangunan ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_bgn);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
-- "Bangunan harus mempunyai hubungan INSIDE, COVEREDBY atau EQUAL dengan Bidang"
-- ===================================================
OPEN cek_lyr_bidang (:NEW.kd_prop,:NEW.kd_kota,:NEW.kd_kec,:NEW.kd_kel, :NEW.kd_blok,:NEW.no_urut,:NEW.kd_jns_op);
FETCH cek_lyr_bidang INTO var_geo;
FOUND := cek_lyr_bidang%FOUND;
CLOSE cek_lyr_bidang;
-- Cek relasi spasial bangunan dengan bidang
var_relation := sdo_geom.relate (:NEW.lyr_bgn, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20003;
errmsg := 'Bidang ' || var_nop|| ' tidak ada. Tidak bisa insert/update objek bangunan';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE', 'EQUAL') THEN
errno := -20004;
errmsg := 'Objek bangunan ' ||var_id|| ' tidak berada pada bidang yang benar';
RAISE integrity_error;
END IF;
END IF;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_JALAN pada tabel jalan dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER sigpbb.tiubs_jalan BEFORE INSERT OR UPDATE OF lyr_jln
ON sigpbb.jalan FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_cek_geo VARCHAR2 (255);
var_id VARCHAR2 (50);
100
var_kel VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_kel (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR)
IS SELECT b.lyr_kel FROM kelurahan b
WHERE b.kd_prop = var_kd_prop AND b.kd_kota = var_kd_kota AND b.kd_kec = var_kd_kec AND b.kd_kel = var_kd_kel;
-- Deklarasi cursor data spasial tabel kelurahan
CURSOR cek_lyr_bidang (var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR )
IS SELECT lyr_bidang FROM bidang
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel;
BEGIN
-- "JALAN harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.id_jalan IS NOT NULL
THEN
var_id := :NEW.nm_jalan;
var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_jln, 2);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri jalan ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_jln);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
FETCH cek_lyr_kel INTO var_geo;
FOUND := cek_lyr_kel%FOUND;
CLOSE cek_lyr_kel;
-- Cek relasi spasial JALAN dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_jln, 'determine', var_geo, 0.005);
IF NOT FOUND THEN
errno := -20002;
errmsg := 'Wilayah kelurahan '|| var_kel|| ' tidak ada. Tidak bisa insert/update objek jalan';
RAISE integrity_error;
ELSE
IF var_relation NOT IN ('COVEREDBY', 'INSIDE') THEN
errno := -20003;
errmsg := 'Jalan '|| var_id|| ' tidak berada pada area kelurahan yang benar';
RAISE integrity_error;
END IF;
END IF;
-- cek relasi dengan bidang
OPEN cek_lyr_bidang (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
LOOP
FETCH cek_lyr_bidang INTO var_geo;
EXIT WHEN cek_lyr_bidang%NOTFOUND;
var_relation := sdo_geom.relate (:NEW.lyr_jln, 'determine', var_geo, 0.005);
IF var_relation LIKE 'OVERLAP%' THEN
errno := -20004;
errmsg := 'Jalan ' || var_id || ' tidak boleh memotong bidang';
RAISE integrity_error;
END IF;
END LOOP;
CLOSE cek_lyr_bidang;
END IF;
-- Errors handling EXCEPTION
WHEN integrity_error THEN
raise_application_error (errno, errmsg);
END;
/
/* Trigger TIUBS_SUNGAI pada tabel sungai dijalankan saat insert atau update data */
CREATE OR REPLACE TRIGGER tiubs_sungai BEFORE INSERT OR UPDATE OF lyr_sungai ON sigpbb.sungai
FOR EACH ROW DECLARE
integrity_error EXCEPTION;
errno INTEGER;
errmsg CHAR (200);
dummy INTEGER;
FOUND BOOLEAN;
var_cek_geom NUMBER (1);
102
var_cek_sk NUMBER (1);
var_geo SDO_GEOMETRY;
var_relation VARCHAR2 (255);
var_cek_geo VARCHAR2 (255);
var_id VARCHAR2 (50);
var_kel VARCHAR2 (25);
-- Deklarasi cursor data spasial tabel kelurahan CURSOR cek_lyr_kel (
var_kd_prop VARCHAR, var_kd_kota VARCHAR, var_kd_kec VARCHAR, var_kd_kel VARCHAR ) IS SELECT lyr_kel
FROM kelurahan
WHERE kd_prop = var_kd_prop AND kd_kota = var_kd_kota AND kd_kec = var_kd_kec AND kd_kel = var_kd_kel;
BEGIN
-- "SUNGAI harus mempunyai hubungan INSIDE atau COVEREDBY dengan Kelurahan"
IF :NEW.kd_prop IS NOT NULL AND :NEW.kd_kota IS NOT NULL AND :NEW.kd_kec IS NOT NULL AND :NEW.kd_kel IS NOT NULL AND :NEW.id_sungai IS NOT NULL
THEN
var_id := :NEW.nm_sungai;
var_kel := :NEW.kd_prop || :NEW.kd_kota || :NEW.kd_kec || :NEW.kd_kel;
-- Cek bentuk geometri
-- ==============================================
var_cek_geom := cek_geometri (:NEW.lyr_sungai, 2);
IF var_cek_geom = 0 THEN
errno := -20003;
errmsg := 'Bentuk geometri sungai ' || var_id || ' tidak valid';
RAISE integrity_error;
END IF;
-- ==============================================
-- Cek sistem koordinat
-- ==============================================
var_cek_sk := cek_sis_koor (:NEW.kd_prop, :NEW.kd_kota, :NEW.lyr_sungai);
IF var_cek_sk = 0 THEN
errno := -20003;
errmsg := 'Sistem koordinat dan atau zonanya salah';
RAISE integrity_error;
END IF;
-- ==============================================
OPEN cek_lyr_kel (:NEW.kd_prop, :NEW.kd_kota, :NEW.kd_kec, :NEW.kd_kel);
FETCH cek_lyr_kel INTO var_geo;
FOUND := cek_lyr_kel%FOUND;
CLOSE cek_lyr_kel;
-- Cek relasi spasial sungai dengan kelurahan
var_relation := sdo_geom.relate (:NEW.lyr_sungai, 'determine', var_geo, 0.005);
IF NOT FOUND THEN