You are on page 1of 54

1.

2.1. Oracle 2.1.1. Pengertian Oracle Oracle merupakan software database yang dibuat oleh Oracle Corporation dan banyak dipakai di perusahaan-perusahaan besar di seluruh dunia. Software ini juga banyak diminati oleh para konsultan pembuat aplikasi yang berkaitan dengan database, karena sistem keamanannya yang sangat handal. 2.1.2. Sejarah Oracle Perusahaan Oracle didirikan pada tahun 1977 oleh tiga orang programmer, Bob Miner, Ed Oates dan Larry Ellison yang menjabat sebagai CEO (Chief Executive Officer). Konon, dari ketiga programmer tersebut, Larry adalah yang nomor 3 dalam programming. Larry lebih sering (dan lebih senang) mengerjakan pemasaran, dan drop out dari kuliah karena keasyikannya di Oracle. Perusahaan ini berkonsentrasi pada pembuatan database server di mainframe. Kisah sukses Oracle Corp terkait dengan sejarah dan teori database relasional. Teori database relasional diperkenalkan hampir secara simultan oleh Edgar F. Codd (dalam artikelnya yang terkenal Large Shared Data Banks) pada tahun 1969. IBM adalah perusahaan pertama yang menerapkan model relasional ini dalam bahasa SQL, dengan produknya DB2. Sayangnya IBM agak ragu akan keampuhan SQL dan model relational (nantinya berpengaruh pada ketertinggalan IBM di pasar database server sistem operasi Unix dan Windows). Larry melihat perkembangan teori model relational dan implementasi database relational dalam DB2. Ia yakin bahwa model relational adalah way of the future dan memutuskan untuk mengimplementasikan model relational di produk Oracle. Sebelumnya produk database Oracle memakai model

nonrelational (tidak jelas apakah model jaringan atau pohon; bahasanya COBOL untuk komputer mainframe). Langkah Larry terbukti benar, dan Oracle menjadi

pesaing kuat bagi IBM dalam pasar database server di mainframe, terutama database bermodel relational. Sekitar pertengahan tahun 1980an, Larry kembali mengambil langkah yang tepat (dan berani) dengan mendeversifikasi produk Oracle (versi 6.x) ke luar mainframe, yakni ke sistem operasi Unix. Inilah booming kedua bagi Oracle, terjadi peningkatan penghasilan dan penjual produk secara drastis. Selanjutnya Oracle Corporation mendiversifikasi Oracle ke sistem operasi Novell Netware, Windows NT (versi Oracle 7.x, mulai tahun 1996), dan Linux (versi 8.x, sekitar tahun 1997). Mulai tahun 1998 Oracle terlihat menghentikan pembuatan produknya untuk sistem operasi MVS dan Novell Netware. Mulai pertengahan tahun 1990an, Larry sangat agresif dalam diversifikasi produk. Oracle Corporation mulai masa itu membuat juga produk-produk non database server seperti Application Server (WebDB, OAS), Development Tools (Oracle Developer, Oracle Designer) dan ApplicationSuite (Oracle Apps).Banyak para praktisi database menggangap Oracle versi 7.x adalah yang paling stabil (Oracle 7.3.4). Suatu perbedaan penting versi 7.3.4 dibanding pendahulunya adalah adanya bitmap index, index yang sangat efisien untuk menangani kolom yang variasi nilainya sempit. Di versi 7 terdapat perbaikan dukungan terhadap VARCHAR, dari batas maksimum 256 menjadi 2000.Versi 8 memperkenalkan partitioning (untuk mengelola database berukuran sangat besar : VLDB atau Very Large DataBase), advanced queue, recovery manager, dan user defined (composite) type. Mulai versi ini juga beberapa tools Oracle dibuat dengan memakai bahasa pemograman Java. Dukungan terhadap Java masih sangat terbatas di Oracle 8. Versi ini memperbesar batas VARCHAR dari 2000 menjai 4000.Oracle 8i (i diartikan sebagai internet) memiliki dukungan yang lebih baik terhadap java, dukungan terhadap XML, two-level partitioning, Internet File System, Internet Directory (memakai Lightweight Directory Access Protocol atau LDAP), arsitektur 3-tier (CORBA, Common Object Request Broker Architecture) untuk konektivitas dan Enterprise Manager-nya, Managed Standby Database, serta perluasan kemampuan trigger. Kebanyakan dukungan tambahan ini memang

terkait dengan internet.Oracle8i terdiri ata 3 rilis. Rilis 1 = versi 8.1.5, riis 2 = versi 8.1.6, dan rilis 3 = versi 8.1.7. Reaplikasi pasa rilis 1 memiliki keterbatasan hanya mampu menangani VARCHAR samapai 2000 karakter. Keterbatasan ini diperbaiki menjadi 4000 karakter pada rilis 2 dan 3.Pada tahun 2001 diperkenalkan Oracle9i. Fitur-fitur baru mencakup self-tuning memory, multiple database-block size serta database template.Kemudian pada tahun 2005 diperkenalkan Oracle 10g. Pada Versi terdapat beberapa versi, antara lain : Enterprise Edition, Standard Edition, Standard Edition One, Express Edition.

2.1.3. Oracle Database 10g : g = Grid Global Grid Forum (GGF) membangun adalah sebuah standardisasi untuk

Sistem Grid Computing. Merupakan semacam Komunitas atau

kelompok kerja yang melakukan Riset dan pengembangan Technologi untuk berbagai perusahaan komersial. Website GGF at http://www.gridforum.org. Oracle berhasil menciptakan Infrastructure atau Sistem Grid Computing yang dapat melakukan balancing segala macam Workload dari beberapa server dan server server tersebut dapat melakukan manage sebuah complete system. Jadi Grid Computing sama fungsinya dengan High Level of Reliability seperti halnya Computer Mainframe atau Super Computer hal ini dikarenakan adanya Clustering Sistem tersebut. Oracles Grid Computing Technology meliputi: a) b) c) d) Automatic Storage Management (ASM) Real Application Clusters (RAC) Oracle Streams Enterprise Manager Grid Control adalah Technology penyimpanan

Automatic Storage Management

database pada beberapa Harddisk, sehingga kapasitas beberapa harddisk yang di

gabungkan menjadi satu. Jadi semacam System RAID 5 atau RAID 6. Semua proses dalam Storage ini di lakukan secara otomatis oleh Oracle. Oracle Real Application Clusters menjalankan dan mengontrol semua workload applikasi dalam suatu cluster yang terdiri atas beberapa server, dan fitur fiturnya adalah: a) Integrated clusterware: terdiri atas cluster connectivity, messaging and locking, cluster control, and recovery. b) Automatic workload management: setting Rules dapat di

definisikan untuk melakukan otomatisasi pada server dalam kondisi normal operation dan response yang harus dilakukan server jika terjadi failure. Rules ini dapat diubah secara dinamis sesuai kebutuhan

perusahaan atau tergantung pada Policy IT. c) Automatic event notification to the mid-tier : respon yang dilakukan oleh server sangat cepat misalnya jika terjadi atau dilakukan perubahan setting pada Cluster kita. Oracle Database 10g Java Database Connectivity (JDBC) drivers failover akan melakukan fast connection

secara otomatis untuk menangani berbagai event atau

perubahan yang kita lakukan. Oracle Streams menyediakan unified framework untuk berbagai

information sharing, combining message queuing, data replication, event notification, functionality. Enterprise Manager Grid Control digunakan untuk manage jaringan database sekala besar / beberapa Database Server Oracle 10g, manage software, provisioning users, cloning databases, dan manage patch sistem. Melakukan data warehouse loading, and publishing and subscribing

monitoring performance

semua

applikasi, maupun

availability dari grid

infrastructure. Kita bisa melakukan pengelompokan atau grouping hardware node, database, dan application server dalam satu unit group target. 2.1.3.1. Oracle 10g Database Architecture

Gambar 1. Oracle 10g Database Architecture

Setiap database Oracle di hubungkan oleh Oracle instance. Suatu database dari sebuah Oracle database server, Oracle mengalokasikan shared memory yang disebut System Global Area (SGA) dan berjalan bersamaan dengan Oracle background proces. Kombinasi dari SGA dan Oracle processes ini dinamakan Oracle Instance. Setelah suatu Instance berjalan, Oracle software menghubungkannya dengan suatu specific database. Ini disebut proses mounting database. Setelah database siap digunakan oleh authorized users. Multiple instances dapat berjalan pada satu komputer database server, masing masing akan mengakses physical database nya sendiri.

Gambar 2. Physical Database Structure

Files yang membentuk sebuah Oracle database adalah : a) Control files : berisi data tentang database itu sendiri ( merupakan informasi physical struktur database ). File file ini sangat penting dan berpengaruh terhadap database. Jika file ini tidak ada, kita tidak bisa membuka data files untuk mengakses seluruh data yang ada didalam database. b) Data files : berisi data user atau data applikasi dari database c) Online redo log files : file ini memungkinkan Instance untuk

melakukan recovery database. Jika database crash dan kehilangan beberapa data files, maka Instance dapat melakukan recovery database mengunakan Online redo log files. d) File tambahan lain yang juga berfungsi sangat penting pada suatu database adalah : e) Parameter file : digunakan untuk mendifinisikan konfigurasi Instance saat melakukan proses starts up.

f) Password file : berisi data users dan password untuk dapat connect ke database dan melakukan berbagai tugas administratif. g) Backup files: digunakan untuk recovery database. h) Archive log files : berisi history atas segala perubahan data (redo) pada suatu Instance. Dengan mengunakan file dan backup file database, kita dapat melakukan recovery data file yang hilang atau rusak.

2.1.3.2. Oracle 10g XE Oracle adalah Database yang banyak digunakan oleh para programer untuk membuat aplikasi berbasis database. merupakan software database yang dapat menampung serta mengelola data dengan kapasitas yang sangat besar dan juga bisa mengaksesnya dengan sangat cepat pula.Sintaks SQL nya yang hampir seluruhnya telah memenuhi standart ANSI-92 memudahkan para programmer database dalam membangun aplikasi baik dari sisi back end(server) maupun dari sisi front end (client).Selain itu, Oracle juga mempunyai sistem keamanan yang sangat bagus.

2.1.3.2.1. Struktur Berkas Oracle XE

Gambar 3. Struktur Berkas Oracle XE

Menggunakan Oracle sebagai aplikasi akan sangat mudah jika kita sudah memahami struktur dari oracle tersebut, banyak sekali kesulitan dalam penggunaan oracle hanya dikarenakan pola fikir yang instant , yaitu langsung ingin menggunakan sebagai aplikasi, tanpa mengerti seperti apa oracle itu sendiri. Gambar diatas memberikan ilustrasi tentang struktur database oracle 10g XE, pada satu database OracleXE yang sudah terinstall akan memiliki lebih dari satu tablespace. Tablespace digunakan untuk mengelompokkan data lojik. Sehingga secara adminstrasi akan lebih mudah mengelola setiap file yang berkaitan dengan aplikasi. Pada saat instalasi awal dalam direktori

$ORACLE_BASE/oradata/XE kita akan mendapatkan 6 buah file data yang memiliki ekstensi .DBF file tersebut berkaitan dengan Tablespace sebagai berikut.

Gambar 4. Tablespace Oracle XE

2.1.4. Perintah SQL Oracle Perintah SQL yang disediakan oleh Oracle cukup banyak, yang dapat dibagi dalam tiga kelompok, DDL, MDL dan DCL. Pada buku ini tidak akan dijelaskan semua perintah SQL tersebut, tetapi dipilihkan yang banyak digunakan untuk keperluan administrasi Oracle. 2.1.4.1. DDL DDL kependekan dari Data Definition Language, yaitu perintah yang digunakan untuk menyatakan/mendefinisikan sesuatu. Meliputi perintah untuk membuat, menghapus maupun mengubah. Berikut ini daftar perintah yang termasuk dalam DDL:

a) Membuat, mengubah dan menghapus obyek: CREATE, ALTER, DROP b) Mengubah nama skema: RENAME c) Menghapus semua data dalam obyek skema tanpa menghapus struktur obyek skema: TRUNCATE d) Melakukan analisa statistik dari suatu obyek: ANALYZE e) Memberikan atau menghapus role dan previlege: GRANT, REVOKE f) Mengubah nilai audin on atau off: AUDIT, NOAUDIT g) Menambahkan komentar pada kamus database: COMMENT Perintah DDL ini berlaku untuk semua jenis object database, seperti tablespace, table, view, procedure, function dan sebagainya. Namun masingmasing memiliki sedikit perbedaan pada saat menyatakan beberapa perintah. 2.1.4.1.1. Create Create digunakan untuk membuat suatu object database. Format untuk membuat tiap object berbeda. Beberapa contoh format untuk membuat tabelspace, tabel, view, fungsi, prosedur, sekuen. 1) Membuat Tablespace
CREATE TABLESPACE "NAMA_TABLESPACE" LOGGING DATAFILE 'C:\ORACLE\ORADATA\EIS\NAMA_FILE.ora' SIZE 200M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE 32767M DEFAULT STORAGE ( INITIAL 64K NEXT 64K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 50 )

2) Membuat User dan hak user


CREATE USER "NAMA_USER" PROFILE "DEFAULT" IDENTIFIED BY "PASSWORD" DEFAULT TABLESPACE "NAMA_TABLESPACE" TEMPORARY TABLESPACE "NAMA_TABLESPACE" ACCOUNT UNLOCK;
GRANT UNLIMITED TABLESPACE TO "NAMA_USER"; GRANT "CONNECT" TO "NAMA_USER"; GRANT "RESOURCE" TO "NAMA_USER";

3) Membuat Tabel
CREATE TABLE "NAMA_TABEL"( "NOMOR" NUMBER(2) NOT NULL, "AGAMA" VARCHAR2(20), CONSTRAINT "Agama_Nomor_1" PRIMARY KEY("NOMOR") USING INDEX);

4) Membuat Index
CREATE UNIQUE INDEX "NAMA_INDEX" ON "ABSENSI_MAHASISWA"("BULAN");

5) Membuat View
CREATE OR REPLACE VIEW "NAMA_VIEW" AS Select * from emp where sal>1000;

6) Membuat Sekuen
CREATE SEQUENCE "NAMA_SEKUEN" INCREMENT BY 1 START WITH 1 MAXVALUE 1.0E27 MINVALUE 1 NOCYCLE CACHE 20 NOORDER

7) Membuat Fungsi
CREATE OR REPLACE return varchar is tahun number(3,0); begin tahun:=to_number(substr(nrp,3,2)); if(tahun<80) then tahun:=100+tahun; end if; tahun:=200-tahun; return substr(nrp,1,2)||trim(to_char(tahun,'000'))||substr(nrp,5 ); end; FUNCTION "NAMA_FUNGSI" (nrp varchar)

8) Membuat Prosedur
create or replace procedure cari_nama_supplier is vNamasuplier suplir.nama_suplier%TYPE; begin select nama_suplier into vNamasuplier from where kode_suplier = 'EJ-01'; dbms_output.put_line('Namanya adalah : ' || vNamasuplier); end;

2.1.4.1.2. Drop Digunakan untuk menghapus suatu object database tertentu. Karena hanya untuk menghapus, maka perintahnya hampir sama semua. Format umumnya,
DROP OBJECT NAMA_OBJECT;

Contoh,
Drop tablespace NAMA_TABLESPACE; Drop user NAMA_USER; Drop table NAMA_TABLE; Drop index NAMA_INDEX; Drop view NAMA_VIEW; Drop sequence NAMA_SEQUENCE; Drop function NAMA_FUNCTION; Drop procedure NAMA_PROCEDURE;

2.1.4.1.3. Alter Alter merupakan perintah yang digunakan untuk mengubah suatu object database. Yang perlu diperhatikan, Oracle tidak banyak memberikan kemudahan untuk mengubah suatu object. Cukup banyak batasan yang ada. Misalkan tidak

dapat mengganti nama suatu object. Tidak dapat mengubah suatu jenis data dalam suatu tabel yang sudah ada isinya. Dan masih banyak lagi.

a) Mengubah Nama Tablespace


ALTER DATABASE RENAME FILE 'C:\ORACLE\ORADATA\EIS\NAMA1.ORA' TO 'C:\ORACLE\ORADATA\EIS\NAMA_BARU.DBF'

b) Mengubah Nama Direktori Tablespace


ALTER DATABASE RENAME FILE 'C:\ORACLE\ORADATA\EIS\NAMA1.ORA' TO 'C:\DIR_BARU\NAMA1.ORA'

c) Mengubah Ukuran Tablespace


ALTER DATABASE DATAFILE 'C:\ORACLE\ORADATA\EIS\NAMA1.ORA' RESIZE 20M

d) Mengubah Password User


ALTER USER "NAMA" IDENTIFIED BY "PASSWORD_BARU"

e) Mengubah Default Tablespace untuk suatu User


ALTER USER "NAMA" DEFAULT

TABLESPACE "COBA" TEMPORARY TABLESPACE "COBA"

f) Mematikan User
ALTER USER "NAMA" ACCOUNT LOCK

g) Membuang Grant suatu User


REVOKE "CONNECT" FROM "NAMA"; ALTER USER "NAMA" DEFAULT ROLE ALL

h) Menambah Grant untuk suatu User


GRANT "DBA" TO "NAMA"; ALTER USER "NAMA" DEFAULT ROLE ALL

i) Mengubah jenis data atau ukuran data pada suatu kolom


ALTER TABLE "EIS"."AGAMA" MODIFY("NOMOR" CHAR(10))

j) Mengubah Kolom Tabel menjadi boleh tidak diisi


ALTER TABLE "EIS"."AGAMA" MODIFY("NOMOR" NULL)

k) Menambahkan kolom baru


ALTER TABLE "EIS"."AGAMA" ADD("KOLOM" VARCHAR2(10) NOT NULL)

l) Menghapus kolom baru


ALTER TABLE "EIS"."AGAMA" SET UNUSED ("KOLOM") CASCADE CONSTRAINTS

m) Menambahkan constraint
ALTER TABLE "EIS"."AGAMA" ADD(CONSTRAINT "AGAMA_UK31031673027967" UNIQUE("AGAMA"))

n) Menghapus constraint
ALTER TABLE "EIS"."AGAMA" DROP CONSTRAINT "Agama_Nomor" CASCADE

o) Mengubah suatu sequence


ALTER SEQUENCE "EIS"."NBUKU" MINVALUE 10 ALTER SEQUENCE "EIS"."NBUKU" MAXVALUE 1.0E2 ALTER SEQUENCE "EIS"."NBUKU" INCREMENT BY 10

2.1.4.2. DML DML kependekan dari Data Modification Language, yaitu perintah yang digunakan untuk melakukan manipulasi data. Meliputi menyisipkan data baru, mengubah data, menghapus data, membaca data. Yang termasuk dalam DML adalah: a) Mengambil data dari satu atau lebih tabel atau view: SELECT b) Menambahkan baris baru ke dalam tabel atau view: INSERT c) Mengubah isi data dari suatu baris pada tabel atau view: UPDATE d) Menghapus suatu baris dari tabel atau view: DELETE e) Melihat rencana pelaksanaan perintah SQL: EXPLAIN PLAN f) Mengunci suatu tabel atau view, membatasi sementara akses dari user lain: LOCK TABLE 2.1.4.2.1. Select Perintah SELECT digunakan untuk membaca atau mengambil suatu nilai dari suatu tabel atau suatu view. Hasil dari suatu perintah select bisa berupa barisbaris data dari tabel atau view, bisa juga merupakan kelompok dari hasil (grup). Format umum dari perintah select adalah:
SELECT KOLOM,FUNGSI(KOLOM),SEKUEN,... FROM NAMATABEL (atau NAMAVIEW) [WHERE KRITERIA] [ORDER BY KOLOM [DESC]] [GROUP BY KOLOM]

dimana, KOLOM, FUNGSI(KOLOM),SEKUEN,... adalah daftar dari kolom data atau hasil fungsi atau dari sekuen yang akan ditampilkan. Jika ingin menampilkan semua yang ada, gunakan tanda asterik (*).

NAMATABEL atau NAMAVIEW adalah nama dari tabel atau view atau kombinasi dari beberapa tabel atau/dan view yang datanya akan diambil. WHERE KRITERIA (bisa ditulis atau tidak) adalah daftar kriteria/filter, yang menyatakan data dengan jenis yang bagaimana akan ditampilkan. ORDER BY KOLOM (bisa ditulis atau tidak) adalah menyatakan apakah data hasil yang ditampilkan akan diurutkan mememuni kriteria tertentu. DESC disertakan jika urutannya ke bawah (besar ke kecil). 2.1.4.2.2. Insert Perintah insert digunakan untuk memasukkan satu atau sejumlah baris ke dalam tabel. Data yang dimasukkan dapat terdiri dari semua kolom yang ada dalam tabel atau hanya beberapa saja, bahkan mungkin hanya satu kolom yang diisi. Format umum dari perintah insert adalah, Jika susunan kolom tidak sesuai dengan susunan kolom pada tabel atau jumlah kolom lebih sedikit dibandingkan jumlah kolom dalam tabel, digunakan perintah,
INSERT INTO NAMA_TABLE (KOLOM1, KOLOM2, KOLOM3, , KOLOMn) VALUES (DATA1, DATA2, DATA3, , DATAn)

Dimana n adalah jumlah kolom yang akan diisi (tidak harus sama dengan jumlah kolom dalam tabel). KOLOM1 sampai KOLOMn adalah nana kolom yang akan diisi (disebutkan satu persatu). DATA1 sampai DATAn adalah data yang harus diisikan ke kolom yang sesuai urutan KOLOM1 sampai KOLOMn. Sedangkan untuk pengisian dengan syarat jumlah kolom dan urutan kolom sama persis dengan tabel, maka digunakan perintah,
INSERT INTO NAMA_TABLE , DATAn) VALUES (DATA1, DATA2, DATA3,

Dengan n adalah jumlah kolom sesuai dengan jumlah kolom dalam tabel. DATA1 sampai DATAn adalah data yang akan dimasukkan untuk setiap kolom dan berurutan sesuai dengan urutan kolom dalam tabel. Jika pengisian ke dalam tabel ingin didapatkan dari hasil query perintah select, maka dapat digunakan perintah sebagai berikut,
INSERT INTO NAMA_TABLE SELECT KOLOM1, KOLOM2, , KOLOMn FROM NAMA_TABLE_SUMBER WHERE KRITERIA

Pada bentuk ini, segala jenis perintah select dapat digunakan, asalkan nama kolom yang dihasilkan sama dengan nama kolom dalam tabel yang akan diisi. Susunan atau jumlahnya tidak perlu sama, yang penting namanya harus sama. Dengan cara ini, dapat memasukkan lebih dari satu baris data sekaligus sesuai dengan hasil query select-nya.

Perlu diperhatikan, setiap data yang memiliki jenis CHAR, VARCHAR, DATE, dan lainnya yang tidak bernilai bilangan, harus ditutup dengan tanda petik tunggal (tanda kutip). Kecuali jika data tersebut berupa angka, meskipun kolomnya berjenis, misalkan VARCHAR, dapat langsung diisi dengan tanpa tanda petik. Oracle akan otomatis melakukan konversi ke jenis bilangan yang sesuai. Termasuk jika kolomnya berjenis NUMBER, diberikan data angka yang diapit tanda petik tunggal, Oracle langsung mengenalinya sebagai bilangan biasa (akan melakukan konversi seperlunya). Misalkan terdapat kolom dengan nama ALAMAT dengan jenis VARCHAR, UMUR dengan jenis NUMBER, TELP dengan jenis VARCHAR, berikut ini adalah benar,
ALAMAT Ngagel baru DKA I/56 Surabaya ALAMAT 123456 ALAMAT 7654321 UMUR 12

UMUR 32 TELP +62315947280 TELP 5947280

Khusus untuk jenis DATE, Oracle memiliki format system khusus, yaitu dalam bentuk DD-MMM-YYYY. Contoh 12-JAN-2002, 31-MAR-2005. Setiap data tanggal yang dimasukkan, harus mengikuti format tersebut, misalkan,
TANGGAL 12-DEC-2001 TANGGAL 31-jan-2003 TANGGAL 1-jun-03

Jika dikehendaki untuk memasukkan data tanggal dengan format lainnya, maka harus dilakukan pengubahan format, dengan menggunakan perintah,
TO_DATE(TANGGAL,FORMAT)

Contoh, untuk memasukkan tanggal dengan bentuk 12-03-2001, digunakan perintah,


TANGGAL TO_DATE(12-03-2001,DD-MM-YYYY)

2.1.4.2.3. Update Perintah update digunakan untuk mengubah isi dari suatu tabel. Satu baris, beberapa baris atau semua isi tabel, sesuai dengan kriteria yang diberikan. Perintah ini dapat mengubah hanya satu kolom, beberapa kolom atau semua kolom dari tabel dan urutannya tidak perlu sesuai dengan urutan kolom dalam tabel. Ini karena setiap kolom harus disebutkan namanya satu per satu. Format umum untuk mengubah isi tabel adalah,
UPDATE NAMA_TABEL SET KOLOM1=DATA1, KOLOM2=DATA2, , KOLOMn=DATAn WHERE KRITERIA;

Contoh untuk menaikkan semua gaji pegawai yang statusnya sebagai honorer dengan kenaikan 10 persen, dapat digunakan perintah sebagai berikut,

Update pegawai set gaji=gaji*1.1 where status=HONORER;

2.1.4.2.4. Delete Perintah delete digunakan untuk menghapus isi dari tabel, satu baris, beberapa baris atau semua isi tabel, sesuai dengan yang diinginkan. Perintah ini tidak menghapus, dalam arti menghilangkan tabel, tetapi hanya menghapus isi tabel, sedangkan tabelnya sendiri masih ada. Untuk menghilangkan tabelnya sendiri, digunakan perintah DROP. Format umum untuk menghapus tabel adalah,
DELETE FROM NAMA_TABLE WHERE KRITERIA;

Contoh untuk menghapus nama pegawai yang memiliki gaji lebih kecil dari 500000 digunakan perintah,
Delete from pegawai where gaji<500000;

2.1.4.3. DCL DCL kependekan dari Data Control Language, yaitu perintah SQL untuk keperluan pengendalian database. Ada cukup banyak perintah dalam kategori ini. Di sini hanya diberikan dua contoh yang banyak digunakan, yaitu commit dan rollback. 2.1.4.3.1. Commit Secara default, Oracle menyediakan fasilitas untuk menampung hasil dari perintah-perintah yang masuk, dimana hasil-hasil tersebut tidak langsung berakibat pada suatu object database. Misalkan perintah untuk menyisipkan suatu data ke tabel, maka data yang disisipkan tersebut tidak benar-benar masuk ke tabel yang dikehendaki. Ini bertujuan agar dapat dilakukan pembatalan perintah

sebelumnya yang sudah dilakukan. Misalkan dalam kasus tadi, membatalkan data yang sudah disisipkan. Jika ingin hasil dari perintah SQL yang telah dilakukan benar-benar berakibat pada object yang dimaksud, dapat diketikkan perintah commit. Artinya perintah-perintah yang telah dilakukan sebelumnya benar-benar dilaksanakan pada object yang dimaksud. 2.1.4.3.2. Rollback Rollback digunakan untuk menghapus kembali perintah-perintah SQL yang sebelumnya telah dilakukan, sebelum perintah commit dilakukan. Jika setelah menjalankan suatu perintah tertentu, kemudian diberikan perintah commit, perintah setelah commit tersebut tidak dapat dibatalkan kembali. Mekanisme rollback ini sangat membantu dalam transaksi-transaksi yang cukup rumit yang memerlukan berbagai konfirmasi untuk melakukan. Jika suatu transaksi sudah terlanjur dilakukan, dengan perintah batal (rollback), transaksi tersebut dapat dibatalkan kembali. Namun demikian, dalam kasus tertentu, cara ini menyebabkan operasi database menjadi sedikit lebih lama, terutama jika dilakukan pada data yang besar dan dilakukan secara berulang-ulang dalam jumlah yang besar. Biasanya dalam aplikasi-aplikasi tertentu, mekanisme rollback ini ditiadakan. Yaitu dengan memasang atau mengatur sebagai auto commit, artinya setiap perintah yang masuk langsung di-commit. Mekanisme ini dapat juga ditiadakan dengan mengatur pada tablespace-nya agar tidak dapat di-rollback. Contoh,
select * from dept; Insert into emp insert into dept values(55,'EDUCATION','PENS'); select * from dept;

rollback; select * from dept; insert into dept values(55,'EDUCATION','PENS'); select * from dept; commit; rollback; select * from dept;

2.1.4.3.3. Fungsi Oracle menyediakan berbagai macam fungsi dasar yang dapat digunakan dalam operasi query, misalkan pada perintah select. Ada dua macam fungsi yang didukung Oracle, Fungsi SQL (built-in) dan user define function. Untuk fungsi SQL, dapat dikategorikan dalam fungsi dengan satu hasil satu baris data dan fungsi dengan satu hasil untuk banyak data. a) Bilangan Fungsi bilangan digunakan untuk menerima data dalam bentuk bilangan dan mengeluarkan hasil juga dalam bentuk bilangan. Kebanyakan dari fungsi ini memiliki ketelitihan sampai 38 digit. Fungsi transcendental
COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN,

and TANH memiliki

ketelitihan sampai 36 digit. Fungsi transcendental ACOS, ASIN, ATAN, and ATAN2 memiliki ketelitihan sampai 30 digit.
No 1 2 3 4 5 6 Nama Fungsi ABS(n) ACOS(n) ADD_MONTHS(d,n) ATAN (n) BITAND(n,m) CEIL (n) Kegunaan Nilai absolute Nilai arc cosinus Tanggal d ditambah bulan n Nilai arc tangen Perhitungan and dari bit Integer terkecil yang lebih

besar atau sama dengan n 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 COS (n) COSH (n) EXP (n) FLOOR (n) LN (n) LOG (m,n) MOD (m,n) POWER (m,n) ROUND (m,n) SIGN (n) SIN (n) SINH (n) SQRT (n) TAN (n) TANH (n) TRUNC(m,n)

Fungsi cos
Cos hiperbola Exponensial Integer terbesar yang lebih kecil atau sama dengan n Logaritma natural Logaritma basis m Sisa hasil bagi M pangkat n Pembulan ke atas n digit desimal Mencari tanda bilangan Fungsi sinus Fungsi hiperbolik sinus Fungsi akar Tangensial Hiperbolik tangensial

Pembulatan ke bawan n digit

Table 1. Fungsi bilangan

Contoh,
Select sin(1,24) from dual; Select add_month(sysdate,2) dua_bulan_lagi from dual; Select round(123.456) from dual;

b) String 1) Nilai string mengembalikan string

No 1

Nama Fungsi CHR(n)

Kegunaan Mengeluarkan kode char dari

bilangan n 2 3 4 5 CONCAT(m,n) INITCAP(n) LOWER (n) Menggabungkan m dengan n Mengubah huruf menjadi huruf besar Mengubah menjadi kecil semua awal huruf

LPAD (n,m,x) LTRIM (n)

Menngeluarkan string n rapat kanan sejumlah m, mengisi spasi dengan x Menghilangkan spasi pada sisi kiri Huruf awal besar, dan dilakukan transfer bentuk Huruf kecil semua dan dilakukan transfer bentuk Huruf besar semua dan dilakukan transfer bentuk Mengubah string m dalam n menjadi x Rapat kiri sejumlah n dan mengisi spasi dengan x Membuang kanan spasi sebelah

6 7 8 9 10 11 12 13 14 15 16

NLS_INITCAP NLS_LOWER NLS_UPPER REPLACE (n,m,x) RPAD (m,n,x) RTRIM (n)

SUBSTR (m,n,x) TRANSLATE (n,m,x) TRIM (n) UPPER(n)

Mengambil sebagain string m, mulai n sebanyak x Menterjemahkan string n sesuai tabel konversi m ke x Menghilangkan spasi di kiri dan kanan Mengubah ke huruf besar

Table 2. Fungsi Nilai String Mengembalikan String

Contoh,
Select upper(ini huruf kecil) huruf_besar from dual; Select substr(ini suatu kalimat,5,4) from dual;

2) String mengembalikan nilai

No 1 2 3 4 5

Nama Fungsi ASCII (char) INSTR (n,m,x) LENGTH LENGTHB INSTRB

Kegunaan Mengembalikan nilai ASCII Mencari posisi string m dalam string n mulai x Menghitung string panjang

Table 3. Fungsi String Mengembalikan Nilai

Contoh,
Select length(ini sebuah kalimat) panjang from dual; Select instr(saudara sekalian,dara,1) posisi from dual;

c) Fungsi Tanggal
No 1 2 3 4 5 6 7 8 Nama Fungsi ADD_MONTHS LAST_DAY MONTHS_BETWEEN NEW_TIME NEXT_DAY ROUND (date function) SYSDATE TRUNC (date function) Table 4. Fungsi Tanggal Kegunaan -

Contoh,
Select sysdate waktu_sekarang from dual;

Select next_day(sysdate) besok from dual;

d) Fungsi Konversi

No 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Nama Fungsi CHARTOROWID CONVERT HEXTORAW NUMTODSINTERVAL NUMTOYMINTERVAL RAWTOHEX ROWIDTOCHAR TO_CHAR (date conversion) TO_CHAR (number conversion) TO_DATE TO_MULTI_BYTE TO_LOB TO_NUMBER TO_SINGLE_BYTE TRANSLATE ... USING UPPER(n) Table 5. Fungsi Konversi

Kegunaan -

Contoh,
Select to_date(12-01-2002,dd-mm-yyyy) from dual; Select to_char(sysdate,dd) tanggal, to_char(sysdate,mm) bulan, to_char(sysdate,yyyy) tahun from dual;

e) Fungsi Aggregate

Fungsi aggregate adalah fungsi yang mengolah lebih dari satu baris data menjadi satu hasil. Hasil dari perhitungan dipengaruhi oleh jumlah pengelompokan (GROUP BY) perhitungan. Kalau dikelompokkan dan terdapat lebih dari satu kelompok, maka jumlah hasilnya sesuai dengan jumlah kelompok yang ada.
No 1 2 3 4 5 6 7 8 9 10 11 12 Nama Fungsi AVG CORR COUNT COVAR_POP COVAR_SAMP GROUPING MAX MIN STDDEV STDDEV_POP STDDEV_SAMP SUM Kegunaan Menghitung rata-rata Menghitung jumlah baris Mencari nilai tertinggi Mencari nilai terendah Menghitung jumlah nilai Table 6. Fungsi Aggregate

Contoh,
Select sum(sal) total_gaji from emp; Select count(empno) total_pegawai from emp; Select count(sal) jumlah_pegawai ,deptno from emp group by deptno;

2.1.5. PL/SQL Oracle 2.1.5.1. Definisi PL/SQL (Procedural Language/Structured Query Language) merupakan sebuah penggabungan antara bahasa pemrograman prosedural (PL) dan SQL syntax. PL/SQL adalah fasilitas yang disediakan Oracle sehingga pengguna dapat memanfaatkan konsep pemrograman. Dalam PL/SQL dapat digunakan perintah untuk memanipulasi data yang ada dalam database Oracle. PL/SQL membentuk pemrograman terstruktur dalam memproses data. Beberapa kelebihan PL/SQL dalam database Oracle : 1) PL/SQL dapat digunakan di server sehingga client hanya dapat mengakses didalam server. 2) Penggunaan PL/SQL mudah dimengerti oleh setiap pengguna. 3) PL/SQL dapat didesain khusus untuk database Oracle dalam menggunakan program aplikasi. 2.1.5.2. Struktur PL/SQL Struktur PL/SQL mirip dengan struktur bahasa pascal atau delphi yang menggunakan struktur blok, sehingga akan mempermudah pengertian dalam pemrograman dengan PL/SQL. Struktur Blok berisi perintah SQL dengan kondisi yang berbeda. Perintah PL/SQL dapat menangani kesalahan saat dijalankan. Setiap pengetikan dengan menggunakan PL/SQL dalam SQL*Plus selalu diakhiri dengan tanda /(slash). Sintaks penggunaan PL/SQL adalah sebagai berikut :
> > > > Declare Begin Exception End

Struktur diatas dapat dijelaskan sebagai berikut :

a)

Bagian Judul (Header) Bagian ini hanya digunakan jika PL/SQL diberikan nama,misalnya untuk prosedur atau fungsi. Bagian ini berisi nama blok,daftar parameter, dan pengembalian hasil (return) jika blok adalahfungsi.

b)

Bagian Deklarasi (declaration) Bagian ini untuk membuat deklarasi mengenai semua variable dan konstanta yang direferensikan dalam pernyataan PL/SQL. Bagian deklarasi ini dimulai dengan perintah DECLARE. Jika tidak ada variable atau konstanta yang ingin dideklarasikan bagian ini boleh dihilangkan, bersifat optional.

c)

Bagian Eksekusi (Execution) Bagian ini memuat pernyataan-pernyataan PL/SQL yang akan ditulis. Bagian eksekusi ini harus dimulai dengan perintah BEGIN.

d)

Bagian Perkecualian (Exception) Bagian ini memuat cara menangani kesalahan-kesalahan (error) pada waktu eksekusi program PL/SQL, bersifat optional. Jika program tidak memuat cara menangani kesalahan, bagian ini boleh

dihilangkan.Setiap pernyataan PL/SQL harus diakhiri dengan tanda titik koma(;) dan semua program PL/SQL harus diakhiri dengan perintah END. 2.1.5.3. Pemanggilan PL/SQL PL/ SQL dapat dipanggil dengan beberapa cara, diantaranya : 1) Langsung dari SQL Plus 2) Dari Aplikasi 3) Dari PL/SQL lainnya

2.1.5.4. Aturan Penulisan 1) Dapat ditulis dalam beberapa baris (tidak harus dalam satu baris perintah) . 2) Dapat berupa nested blok 3) Karakter dan literal diapit oleh tanda kutip 4) Setiap perintah/blok diakhiri dengan titik koma (;) 5) Komentar diawali dengan tanda min dua kali(--) atau diapit dengan tanda /**/ 6) Pemberian nilai menggunakan := 7) Dapat menggunakan Bind Variable 8) Tanda garis miring(/) berarti run

2.1.5.5. Bentuk Umum Sintaks PL/SQL Oracle


DECLARE variabel tipe_data; konstanta CONSTANT tipe_data := nilai; ... BEGIN statement_1; statement_2; ... EXCEPTION WHEN nama_eksepsi THEN statement_untuk_mengatasi_error; ... END;

Contoh Program (tanpa exception) :


SQL> SET SERVEROUTPUT ON SQL>DECLARE v1 NUMBER(3); BEGIN v1 := 3; DBMS_OUTPUT.PUT_LINE('v1= ' || v1); END; /

Contoh Program (dengan exception):


SQL>SET SERVEROUTPUT ON SQL>DECLARE X Integer; BEGIN X := Belajar Oracle; DBMS_OUTPUT.PUT_LINE( TO_CHAR(X) ); EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE (Kesalahan pada pengisian nilai); END;

2.1.5.6. Tipe Data a) Tipe Data dasar : 1) Numerik

NUMBER, BINARY_INTEGER, DEC, DOUBLE PRECISION, INTEGER, INT, NUMERIC.

2) Karakter
VARCHAR2, CHAR, LONG

3) DATE 4) BOOLEAN 5) ROWID b) Tipe Data tambahan : RECORD, ARRAY Type data yang dapat dikenali dalam PL/SQL dapat berupa type data SQL dan type data seperti : 1) BOOLEAN Dipakai untuk menyatakan data logika, yaitu TRUE(benar), FALSE(salah), dan NULL(kosong). 2) BINARY_INTEGER Digunakan untuk mendeklarasikan bilangan yang tidak mempunyai angka desimal. Tipe data NATURAL dan POSITIVE merupakan subset dari BINARY_INTEGER. 3) %TYPE Tipe data ini dipakai untuk menandakan bahwa variabel yang deklarasikan sama dengan tipe data dari kolom tabel tertentu. 4) %ROWTYPE Tipe data ini menandakan bahwa sekelompok variabel adalah sama dengan tipe data Dari row suatu tabel tertentu. 5) Tabel dan Record Tipe data komposit untuk pemakaian yang lebih kompleks. 2.1.5.7. Variabel dan Konstanta Pada bagian deklarasi ditempatkan variable dan konstanta yang dipakai oleh pernyataan PL/SQL yang dibuat. a) Variabel

Variabel adalah sebuah peubah yang digunakan untuk menampung sebuah nilai di memori komputer. Dapat menerima nilai baru atau sebaliknya diubah pada saat program dieksekusi. Bentuk Umum :
variable_name datatype [NOT NULL := value ];

Keterangan : Variable_name adalah nama variabel. Datatype adalah valid PL / SQL datatype. NOT NULL adalah sebuah spesifikasi opsional pada variabel. Nilai atau DEFAULT juga merupakan spesifikasi opsional, di mana anda bisa menginisialisasi variabel. Setiap deklarasi variabel adalah pernyataan terpisah dan harus diakhiri dengan titik koma. Contoh Deklarasi Variabel :
DECLARE X integer; Alamat varchar2(40); No_induk char(8); ..... BEGIN X := 12; Alamat := Gelatik Dalam 391, Bandung; No_induk := DOG29549; END;

Ketika

variabel

ditetapkan

sebagai

TIDAK

NULL,

Anda

harus

menginisialisasi variable ketika dideklarasikan. Contoh di bawah ini menyatakan dua variabel, salah satunya adalah tidak null.

DECLARE salary number(4); dept varchar2(10) NOT NULL := HR Dept;

Nilai variabel yang bisa berubah dalam pelaksanaan atau pengecualian bagian PL / SQL Block. Kita dapat menempatkan nilai ke variabel dalam dua cara yang diberikan dibawah ini. 1) Kita dapat langsung memberikan nilai pada variabel. Sintaks Umum adalah: variable_name:= value; 2) Kita dapat menempatkan nilai ke variabel langsung dari kolom database dengan menggunakan SELECT INTO statement. INTO pernyataan. Sintaks Umum adalah:
SELECT column_name INTO variable_name FROM table_name [WHERE condition];

b) Konstanta Digunakan untuk menyimpan sebuah nilai di memori komputer. Nilai yang disimpan bersifat tetap (konstan). Nilai ditentukan pada saat deklarasi dibuat sehingga nilainya tetap pada saat program dieksekusikan. Contoh Deklarasi Konstanta :
DECLARE pi CONSTANT real := 3.14; lebar CONSTANT integer := 100;

2.1.5.8. Komentar Digunakan untuk memudahkan proses maintenance Jenis komentar :

a) /* ... */ : untuk beberapa baris komentar b) --... : untuk satu bari komentar Contoh : /* Ini adalah komentar Oracle */ -- Ini juga komentar Oracle

2.1.5.9. Struktur Kontrol PL/SQL Berdasarkan structure theorem, setiap program komputer dapat ditulis menggunakan struktur kontrol dasar yang ditunjukkan pada gambar dibawah ini. Mereka dapat dikombinasikan dalam suatu cara yang diperlukan untuk menjawab permasalahan-permasalahan yang ada.

Gambar 5. Struktur Kontrol Dasar Program Komputer

a) Struktur seleksi menguji kondisi, lalu mengeksekusi satu rangkaian perintah-perintah daripada lainnya, bergantung kepada kondisi mana yang true atau false. Suatu condition (kondisi) merupakan suatu variable atau ekpresi yang menghasilkan nilai Boolean (TRUE atau FALSE).

b) Struktur perulangan mengeksekusi rangkaian perintah-perintah secara berulang-ulang selama suatu kondisi bernilai true. c) Struktur sekuensial (berurutan) secara sederhana mengeksekusi rangkaian perintah-perintah dalam urutan.

2.1.5.10. Keuntungan Penggunaan PL/SQL a) Integrasi Memungkinkan Aplikasi dan Oracle Server menggunakan Library yang dapat digunakan bersama-sama dalam bentuk stored procedure b) Peningkatan Kinerja Penggunaan PL/SQL, memungkinkan pengiriman perintah secara blok dalam satu perintah yang secara drastis dapat menurunkan trafik jaringan c) Modular Bentuk modular memungkinkan banyak kemudahan yang dapat diperoleh d) Portable PL/SQL adalah sarana yang asli dimiliki oleh Oracle Server, artinya, program PL/SQL dapat dengan mudah dipindahkan dari satu Oracle Server ke Oracle Server lainnya, meskipun dengan OS atau platform yang berbeda. e) Dapat mendeklarasikan Variable Dapat berupa Variable, Constant, Cursor dan Exception Penggunaan variable/identifier sangat memudahkan dalam membuat suatu perintah. Misalkan untuk membaca hasil suatu perintah SELECT untuk diproses dan hasilnya digunakan untuk melakukan proses lainnya f) Dapat menggunakan Struktur Kontrol LOOP, FOR, WHILE g) Dapat menangani Error 1) Error bisa dihasilkan/dibangkitkan oleh Oracle

2) Server atau bisa dibangkitkan sendiri dengan sengaja 3) Untuk mengantisipasi berbagai hal yang barangkali sulit untuk ditangani secara langsung menggunakan kontrol program 2.2. Stored Function Bekerja modular atau per modul sangatlah membantu dalam membuat sebuah program yang besar. Pemrograman modular secara sederhana dapat diibaratkan membuat sebuah rumah. Pembuatan semakin cepat jika setiap pekerjaan dibebankan kepada tukang yang ahli. Satu pekerjaan satu tukang. Inilah yang dinamakan modular yaitu memisahkan pekerjaan-pekerjaan dengan tujuan masing-masing. Oracle PL/SQL memberikan sebuah bantuan untuk sebuah pekerjaan dengan memberikan unit-unit atau bagian-bagian program yang terpisah-pisah. Setiap unit/bagian tersebut memiliki tujuan tertentu. Maka unit-unit yang disediakan adalah FUNCTION Fungsi adalah blok PL/SQL yang dapat mengembalikan nilai. Karena itu perlu ditambahkan statemen RETURN untuk proses pengembalian nilai.
CREATE [OR REPLACE] FUNCTION nama_fungsi (parameter1 tipedata, parameter2 tipedata,...) RETURN tipe_data_fungsi IS variable_variabel_lokal tipedata; BEGIN statemen_statemen; ... RETURN nilai_fungsi; END;

Contoh
/*Fungsi pencarian nama supplier*/

CREATE OR REPLACE FUNCTION cari_supp (pi_kode VARCHAR2) RETURN supplier.nama_supp%TYPE IS v_NamaSupp supplier.nama_supp%TYPE; BEGIN -- Mengambil nama supplier berdasar parameter SELECT nama_supp INTO v_NamaSupp FROM supplier WHERE UPPER(kode_supp) = UPPER(pi_kode); -- Mengembalikan nilai RETURN v_NamaSupp; END;

2.3. Stored Procedure Konsep prosedural dalam PL/SQL (Procedural Language extensions to SQL) merupakan sebuah teknologi yang memungkinkan kita membuat blok program layaknya dalam bahasa pemrograman prosedural seperti C, Fortran, COBOL, dan lainnya. Tanpa adanya PL/SQL, akan dilakukan proses ekseskusi terhadap statemen-statemen SQL sekali dalam tiap waktu. Apabila program atau aplikasi client hanya menggunakan SQL murni maka program tersebut akan melakukan pemanggilan berulang-ulang yang akan menurunkan performa.

Gambar 6. Pemanggilan Berulang SQL

Sedangkan dengan PL/SQL, aplikasi dapat mengirimkan sekumpulan statemen ke database secara langsung dalam satu waktu. Tentu saja ini akan mereduksi waktu

perjalanan ke dalam suatu jaringan yang terjadi antara database server dan aplikasi client.

Gambar 7. Pemanggilan Statement Procedure/ Function

Apabila kita membuat prosedur atau fungsi dalam database (stored procedure/stored function) maka aplikasi cukup melakukan pemanggilan dan menunggu hasil yang diberikan oleh database. Pemanggilan prosedur semacam ini sering disebut RPC (Remote Procedure Call). Ini jauh lebih efisien dari kedua cara di atas.

Gambar 8. Remote Procedure Call

Prosedur adalah blok PL/SQL yang menyimpan sekumpulan perintah tanpa disertai pengembalian nilai.
CREATE [OR REPLACE] PROCEDURE nama_prosedur (parameter1 tipedata, parameter2 tipedata,...) IS variable_variabel_lokal tipedata; BEGIN statemen_statemen;

... END;

Contoh
/*Prosedur pengecekan stok lemari es*/ CREATE OR REPLACE PROCEDURE prc_stok_brg IS v_stok INTEGER; BEGIN -- Mengambil nilai stok dari barang lemari es -- (nilai stok adalah bilangan positif) SELECT stok_barang INTO v_stok FROM barang WHERE UPPER(nama_barang) = UPPER(lemari es); --Memeriksa nilai dari variabel v_stok IF v_stok = 0 THEN --Jika v_stok = 0, cetak keterangan ke layar DBMS_OUTPUT.PUT_LINE(Persediaan barang telah habis); END IF; END;

2.4. Trigger Trigger adalah blok PL/SQL yang disimpan dalam database dan akan diaktivasi ketika kita melakukan statement-statement SQL (DELETE, UPDATE, dan INSERT) pada sebuah tabel. Aktivasi trigger didasarkan pada event yang terjadi di dalam tabel tersebut sehingga trigger dapat membantu dalam menjaga integritas dan konsistensi data. Implementasi trigger yang sering ditemui dalam dunia nyata adalah untuk mengeset dan mengubah nilai kolom dalam suatu tabel sehingga validasi nilai dari tabel tersebut akan terjaga. Adanya trigger dalam

database akan meringankan kita dalam pembuatan aplikasi karena di dalam aplikasi yang kita buat, kita tidak perlu lagi untuk melakukan validasi data.

2.4.1. Membuat Trigger Oracle telah menyediakan statement CREATE TRIGGER untuk membuat sebuah trigger yang selanjutnya akan diaktivasi berdasarkan event tertentu. Secara umum, event trigger terbagi menjadi dua, yaitu BEFORE (sebelum) dan AFTER (setelah). Event tersebut menandakan kapan trigger akan diaktivasi, apakah sebelum ataukah sesudah proses yang dilakukan di dalam tabel bersangkutan.

Daftar event yang mungkin digunakan untuk mengaktifkan trigger:

Table 7. Daftar Event Trigger

Model-model yang digunakan untuk menspesifikasi aturan basis data aktif adalah model ECA (Event-Condition-Action). Aturan dalam model ECA memiliki tiga komponen yaitu:

a)

Event Event yang memicu suatu rule tersebut biasanya berupa operasi perubahan basis data yang secara eksplisit ditambahkan ke basis data. Namun pada umumnya, bisa berupa event temporal atau jenis event eksternal yang lain.

b)

Condition Condition menentukan apakah suatu rule dijalankan atau tidak. Ketika suatu trigger dijalankan, maka bagian condition (bersifat optional) akan dievaluasi jika didefinisikan oleh yang membuat trigger. Jika evaluasi bagian condition bernilai TRUE maka aksi suatu rule dijalankan.

c)

Action Action biasanya berupa statement sql.

2.4.2. Format Penggunaan Trigger Pada Umumnya

CREATE [OR REPLACE] TRIGGER trigger_name {BEFORE | AFTER} triggering_event [referencing_clause] [WHEN trigger_condition] [FOR EACH ROW] Trigger_body;

Dimana

trigger_name

adalah

nama

trigger,

triggering_event

menspesifikasikan event yang firing (menyalakan) trigger, dan trigger_body adalah kode utama untuk trigger. Referencing_clause digunakan untuk menunjuk pada data dalam baris yang saat ini sedang dimodifikasi dengan nama yang berbeda. Jika ada trigger_condition dalam klausa WHEN, pertama akan dievaluasi dan kemudian trigger_body dieksekusi hanya jika hasil evaluasi

bernilai TRUE. Trigger dapat dinyalakan sebelum (before) atau sesudah (after) eksekusi statement, dan dapat dinyalakan sekali tiap baris yang dipengaruhi atau sekali tiap statement. Kombinasi dari tiga faktor ini menetukan tipe trigger. Ada total 12 kemungkinan: 3 statement x 2 timing x 2 level. Tabel berikut menunjukkan tipe dari trigger Data Manipulating Language

Table 8. Trigger Data Manipulating Language

Contoh

Gambar 9. Contoh Tabel Untuk Penggunaan Trigger

SQL pembuatan tabel dosen:


Create table dosen( nip_dosen char(10) primary key not null, nama_dosen char(20), jumlah_wali integer default 0 )

SQL pembuatan tabel mahasiswa:


Create table mahasiswa( nrp_mhs char(10) primary key not null, nama_mhs char(20), id_wali char(10) not null, foreign key (id_wali) references dosen(nip_dosen) )

Pada tabel dosen JUMLAH_WALI diatur dengan nilai awal default null atau 0. NIP_DOSEN merupakan primary key pada tabel dosen dan menjadi references di tabel mahasiswa dengan foreign key ID_WALI dan NRP_MHS sebagai primary key pada tabel mahasiswa. Untuk menjaga agar nilai-nilai derived attribute tetap benar, dapat dilakukan dengan menggunakan trigger. Event-event yang dapat mempengaruhi perubahan nilai dari jumlah_wali sebagai berikut: 1. INSERT mahasiswa baru 2. UPDATE mahasiswa dari id_wali satu ke id_wali yang lain 3. DELETE mahasiswa yang ada Ketiga event diatas akan digabungkan menjadi satu dalam sebuah trigger dengan SQL sebagai berikut:
CREATE OR REPLACE TRIGGER nambah After Begin If inserting then Update dosen Set jumlah_wali = jumlah_wali+1 Where nip_dosen = :new.id_wali; End if;

If deleting then

Update dosen Set jumlah_wali = jumlah_wali-1 Where nip_dosen = :old.id_wali; End if; If updating then Begin Update dosen Set jumlah_wali = jumlah_wali+1 Where nip_dosen = :new.id_wali; Update dosen Set jumlah_wali = jumlah_wali-1 Where nip_dosen = :old.id_walil; End; End if; End;

Keterangan: Nama trigger yaitu nambah Event after menandakan bahwa trigger ini akan diaktifkan sekali setelah statement yang diinginkan dijalankan (INSERT, UPDATE, DELETE) pada tabel mahasiswa. Bila sebuah data di-insert-kan dalam tabel mahasiswa maka tabel dosen akan di update setelah perintahnya dijalankan dengan proses: set jumlah_wali = jumlah_wali+1 dengan syarat nip_dosen = :new.id_wali. Bila data di delete, maka proses yang akan dijalankan oleh trigger setelah proses tersebut adalah: set jumlah_wali = jumlah_wali-1 dengan syarat nip_dosen = :old.id_wali Bila data update, maka proses yang akan dilakukan oleh trigger yaitu menambahkan data kemudian menghapus data yang lama.

2.5. Package Oracle Package adalah sebuah schema object yang mengelompokkan PL/SQL types, items, dan subprograms, yang terkait secara logikal. Packages biasanya memiliki dua bagian, sebuah specification dan sebuah body, meskipun kadangkala body tersebut tidak diperlukan. Specification (atau spec) merupakan antarmuka terhadap aplikasi-aplikasi kita; ia mendeklarasikan types, variables, constants, exceptions, cursors, dan subprograms yang tersedia untuk digunakan. Body secara penuh mendefinisikan cursors dan subprograms, dan juga mengimplementasikan spec.

Gambar 10. Package Oracle

Seperti ditunjukkan oleh Gambar diatas, kita dapat memikirkan sebuah spec sebagai sebuah antarmuka operasional dan body sebagai sebuah kotak hitam (black box). Kita dapat men-debug, meningkatkan, atau menimpa sebuah package body tanpa mengubah antarmuka (package spec) ke package tersebut.

Untuk menciptakan packages, kita menggunakan perintah CREATE PACKAGE, dimana kita dapat mengeksekusinya secara interaktif dari SQL*Plus. Berikut ini adalah sintaksnya:

CREATE [OR REPLACE] PACKAGE package_name [AUTHID {CURRENT_USER | DEFINER}] {IS | AS} [PRAGMA SERIALLY_REUSABLE;] [collection_type_definition ...] [record_type_definition ...] [subtype_definition ...] [collection_declaration ...] [constant_declaration ...] [exception_declaration ...] [object_declaration ...] [record_declaration ...] [variable_declaration ...] [cursor_spec ...] [function_spec ...] [procedure_spec ...] [call_spec ...] [PRAGMA RESTRICT_REFERENCES(assertions) ...] END [package_name]; [CREATE [OR REPLACE] PACKAGE BODY package_name {IS | AS} [PRAGMA SERIALLY_REUSABLE;] [collection_type_definition ...] [record_type_definition ...] [subtype_definition ...] [collection_declaration ...]

[constant_declaration ...] [exception_declaration ...] [object_declaration ...] [record_declaration ...] [variable_declaration ...] [cursor_body ...] [function_spec ...] [procedure_spec ...] [call_spec ...] [BEGIN sequence_of_statements] END [package_name]

Spec menyimpan public declarations, yang terlihat dari aplikasi kita. Kita harus mendeklarasikan subprograms pada akhir dari spec setelah seluruh itemitem yang lain (kecuali pragmas yang menamai sebuah function spesifik; seperti halnya pragmas harus mengikuti function spec). Body menyimpan detil implementasi dan private declarations, yang mana tersembunyi terhadap aplikasi kita. Mengikuti declarative part dari package body adalah optional initialization part, yang secara khusus menyimpan perintahperintah yang meng-inisialisasi package variables. Klausa AUTHID menentukan apakah seluruh subprogram-subprogram terpackage dijalankan dengan privileges dari definer (default) atau invoker-nya, dan apakah referensi tak terkualifikasi dari mereka terhadap schema objects ditetapkan di dalam schema dari definer atau invoker tersebut. Untuk informasi lebih, kita dapat membaca kembali pembahasan PL/SQL Subprograms. Sebuah call spec mengijinkan kita mempublikasikan sebuah Java method atau external C function di dalam Oracle data dictionary. Call spec tersebut

mempublikasikan rutin (routine) dengan cara memetakan name, parameter types, dan return type-nya terhadap SQL imbangannya. Dalam contoh di bawah ini, kita mem-package sebuah record type, sebuah cursor, dan dua procedure kepegawaian. Perlu diingat bahwa procedure hire_employee menggunakan database sequence empno_seq dan function SYSDATE untuk menambahkan sebuah employee number baru dan hire date. Contoh :
CREATE OR REPLACE PACKAGE emp_actions AS -- spec TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL); CURSOR desc_salary RETURN EmpRecTyp; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER, comm NUMBER, deptno NUMBER); PROCEDURE fire_employee (emp_id NUMBER); END emp_actions; CREATE OR REPLACE PACKAGE BODY emp_actions AS -- body CURSOR desc_salary RETURN EmpRecTyp IS SELECT empno, sal FROM emp ORDER BY sal DESC; PROCEDURE hire_employee ( ename VARCHAR2, job VARCHAR2, mgr NUMBER, sal NUMBER,

comm NUMBER, deptno NUMBER) IS BEGIN INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job, mgr, SYSDATE, sal, comm, deptno); END hire_employee; PROCEDURE fire_employee (emp_id NUMBER) IS BEGIN DELETE FROM emp WHERE empno = emp_id; END fire_employee; END emp_actions;

Hanya deklarasi di dalam package yang terlihat dan dapat dikses terhadap aplikasi. Detil implementasi di dalam package body disembunyikan dan tidak dapat diakses. Jadi, kita dapat mengubah body (implementation) tanpa harus meng-compile ulang program-program yang memanggilnya.

2.5.1. Keuntungan PL/SQL Packages Packages menawarkan beberapa keuntungan: modularitas, desain aplikasi yang lebih mudah, penyembunyian informasi, tambahan fungsionalitas, dan performa yang lebih baik.

a) Modularity Packages mengijinkan kita untuk mengenkapsulasi secara logikal types, items, dan subprograms yang berhubungan di dalam sebuah PL/SQL module yang memiliki nama. Setiap package mudah dipahami, dan antarmuka antara packages adalah sederhana, jelas, dan didefinisikan dengan baik. Hal ini membantu pembangunan aplikasi.

b) Easier Application Design Ketika mendesain sebuah aplikasi, seluruh yang kita butuhkan awalnya adalah informasi antarmuka di dalam package specs tersebut. Kita dapat mengkodekan dan meng-compile sebuah spec tanpa body-nya. Kemudian, stored subprograms yang mereferensi kepada package tersebut dapat dicompile juga. Kita tidak perlu mendefinisikan package bodies secara penuh sampai kita siap untuk menyelesaikan aplikasi. c) Information Hiding Dengan packages, kita dapat menentukan types, items, dan subprograms mana saja yang bersifat public (terlihat dan dapat diakses) atau yang private (tersembunyi dan tidak dapat diakses). Sebagai contoh, jika sebuah package mengandung empat subprograms, yang tiga mungkin public dan yang satu private. Package menyembunyikan implementasi dari private subprogram sehingga hanya package tersebut (bukan aplikasi kita) yang terpengaruh jika implementasi diubah. Hal ini memudahkan pemeliharaan dan peningkatan. Juga, dengan menyembunyikan detil implementasi dari pengguna, kita dapat melindungi integritas dari package tersebut. d) Added Functionality Variable-variable dan cursor-cursor public ter-package tetap ada selama satu session. Sehingga, mereka dapat digunakan secara bersama-sama oleh subprograms yang berjalan dalam environment tersebut. Juga, mereka memperbolehkan kita memelihara data melalui transaksi-transaksi tanpa harus menyimpannya di dalam database. e) Better Performance Ketika kita memanggil sebuah subprogram terpackage untuk pertama kali, seluruh package di-load ke memory. Sehingga, pemanggilan-pemanggilan berikutnya terhadap subprogram-subprogram terkait dengan di dalam package tersebut tidak memerlukan disk I/O. Juga, packages berhenti mengaitkan ketergantungan dan dengan demikian tidak memerlukan re-compile ulang

yang tidak perlu. Sebagai contoh, jika kita mengubah implementasi dari sebuah function ter-package, Oracle tidak perlu meng-compile ulang subprogram-subprogram yang memanggilnya karena mereka tidak bergantung kepada package body. 2.5.2. Mereferensi isi Packages Untuk mereferensi terhadap types, items, subprograms, dan call specs yang di deklarasikan bersama suatu package spec, kita menggunakan notasi titik (dot notation), seperti berikut ini:
package_name.type_name package_name.item_name package_name.subprogram_name package_name.call_spec_name

Kita dapat mereferensi isi dari package dari database triggers, stored subprograms, 3GL application programs, dan berbagai Oracle tools. Sebagai contoh, kita dapat memanggil procedure ter-package hire_employee dari SQL*Plus, seperti berikut ini:
SQL> CALL emp_actions.hire_employee('TATE', 'CLERK', ...);

Dalam contoh di bawah ini, kita memanggil procedure yang sama dari sebuah anonymous PL/SQL block yang diletakkan di dalam sebuah Pro*C program. Parameter-parameter aktual emp_name dan job_title merupakan host variables (yaitu, variables yang dideklarasikan di dalam sebuah host environment).
EXEC SQL EXECUTE BEGIN emp_actions.hire_employee(:emp_name, :job_title, ...);

2.5.3. Fitur-Fitur Packages Package body mengimplementasikan package spec. Yaitu, bahwa package body mengandung implementasi dari setiap cursor dan subprogram yang dideklarasikan di dalam package spec. Perlu kita ingat bahwa subprograms yang didefinisikan di dalam sebuah package body dapat diakses diluar package tersebut hanya jika specs mereka juga muncul di dalam package spec tersebut. Untuk menyesuaikan subprogram specs dan bodies, PL/SQL melakukan sebuah perbandingan token-by-token dari headers mereka. Sehingga, kecuali untuk white space, headers harus sesuai kata demi kata. Jika tidak, PL/SQL akan memunculkan sebuah exception, seperti yang ditunjukkan oleh contoh berikut ini:
CREATE PACKAGE emp_actions AS ... PROCEDURE calc_bonus (date_hired emp.hiredate%TYPE, ...); END emp_actions; CREATE PACKAGE BODY emp_actions AS ... PROCEDURE calc_bonus (date_hired DATE, ...) IS -- deklarasi parameter menyebabkan munculnya sebuah exception karena DATE -- tidak sesuai dengan emp.hiredate%TYPE kata demi kata BEGIN ... END; END emp_actions;

Package body dapat juga mengandung deklarasi-deklarasi private, yang mana mendefinisikan types dan items yang diperlukan untuk kerja internal dari package tersebut. Jangkauan dari deklarasi-deklarasi ini lokal terhadap package body tersebut. Dengan demikian, types dan items yang dideklarasikan tidak dapat diakses kecuali di dalam package body. Tidak seperti package spec, bagian deklaratif dari sebuah package body dapat mengandung subprogram bodies.

Mengikuti declarative part dari sebuah package body adalah optional initialization part, yang mana biasanya menyimpan perintah-perintah yang menginisialisasi beberapa variables yang sebelumnya dideklarasikan di dalam package. Initialization part dari sebuah package memainkan sebuah peran minor karena, tidak seperti subprograms, sebuah package tidak dapat dipanggil atau dilewati parameter. Sebagai hasilnya, initialization part dari sebuah package hanya berjalan sekali, yaitu pertama kali ketika kita mereferensi package tersebut. Perlu kita ingat bersama, jika sebuah package spec hanya mendeklarasikan types, constants, variables, exceptions, dan call specs, maka package body tidak diperlukan lagi. Namun, body dapat tetap digunakan untuk menginisialisasi itemitem yang dideklarasikan di dalam package spec. 2.5.4. Batasan Kita tidak dapat mereferensi remote packaged variables baik secara langsung maupun tidak langsung. Sebagai contoh, ktia tidak dapat memanggil procedure berikut ini dari jarak jauh (remotely) karena ia mereferensi kepada sebuah packaged variable di dalam sebuah klausa inisialisasi parameter:
CREATE PACKAGE random AS seed NUMBER; PROCEDURE initialize (starter IN NUMBER := seed, ...);

Juga, di dalam sebuah package, kita tidak dapat mereferensi host variables.

You might also like