proposal bdl

Upload: mapan-adhitya-sutasmadi

Post on 14-Jul-2015

243 views

Category:

Documents


0 download

DESCRIPTION

Proposal Basis Data Lanjut dengan menggunakan oracle 10g.

TRANSCRIPT

BAB I PENDAHULUAN 1.1 Judul Proyek Sistem Informasi Toko Komputer 1.2 Latar Belakang Dengan berkembangnya teknologi informasi, mengubah manusia dalam menyelesaikan semua perkerjaannya. Tidak hanya dalam perkerjaannya saja tetapi dalam segala aspek kehidupan manusia, seperti pada saat pencarian informasi, pengambilan keputusan, membuat penilaian dan perkiraan untuk perencanaan dan pengendalian atau analisis pribadi dilakukan dengan mengunakan komputerisasi. Perancangan sistem informasi memungkinkan pemakai mengakses data dan informasi lingkungan berdasarkan subsistem fungsional dan menggantikan teknologi atau sistem penyimpanan data-data konvensional ke dalam bentuk datadata yang dapat disimpan dalam komputer sehingga meningkatkan efisiensi dalam pencarian data dan perawatan data. Informasi adalah data yang diolah menjadi bahan yang lebih berguna dan berarti bagi penerimanya. Dengan informasi sebuah perusahaan, dalam hal ini Toko Komputer, dapat mengetahui data barang, data pegawai, data pelanggan dan aktivitas yang terjadi pada Toko Komputer tersebut. Oleh sebab itu dalam Toko Komputer tersebut diperlukan sebuah sistem informasi yang dapat mengolah dan merangkum data yang berhubungan dengan aktivitas dan kepegawaian. Sistem informasi ini disebut Sistem Informasi Toko Komputer (SITB). SITB harus dapat memenuhi kebutuhan perusahaan UD. Maju Mundur. SITB juga perlu memberikan tingkatan pengguna dalam hal akses terhadap data-data tersebut, tidak semua dapat mengakses data tertentu dan melakukan perubahan terhadapnya. Sehingga masing-masing pengguna hanya akan memperoleh hak kuasa terhadap informasi yang diinginkan.

1.3 Rumusan Masalah Masalah yang akan diteliti adalah bagaimana merancang sistem informasi untuk toko Komputer. Penelitian ini dilakukan untuk mengetahui:1. Bagaimana merancang Sistem Informasi untuk Toko Komputer?

2. Bagaimana kinerja sistem informasi yang telah dibuat? 1.4 Tujuan Tujuan dari proposal ini adalah 1. Menghasilkan sistem informasi untuk perusahaan Toko Komputer. 2. Menganalisis kinerja sistem informasi toko Komputer dengan adanya query PL/SQL dan triggering di sistem tersebut. 1.5 Batasan Masalah Batasan-Batasan masalah yang digunakan dalam penelitian ini adalah : 1. Sistem Informasi akan dirancang hanya untuk Komputer atau PC (Stand Alone) 2. Data-Data penunjang nama Barang yang dijual oleh toko dan data para pegawai, serta data pelanggan. 3. Output yang dihasilkan adalah transaksi penjualan serta laporan setiap bulan untuk perusahaan. 1.6 Manfaat Manfaat dari penelitian ini adalah :1. Untuk memberi kemudahan pegawai untuk melakukan memasukkan data

transaksi penjualan di toko Komputer. 2. Untuk memberi kemudahan pegawai dalam memberikan laporan setiap bulan kepada manager. 1.7 Metodologi Metode yang digunakan dalam penelitian ini meliputi metode pengumpulan data dan metode pengembangan perangkat lunak. > Metode Pengumpulan Data

a. Studi Literatur Yaitu dengan melakukan studi mengenai sistem informasi, database oracle melalui literaturliteratur seperti buku, jurnal, dan sumber ilmiah lain seperti laman web, artikel, dan dokumen teks yang berhubungan. b. Wawancara Yaitu dengan melakukan wawancara kepada pemilik toko, untuk memperoleh data yang diperlukan untuk penelitian dan pemKomputer perangkat lunak. Metode Pengembangan Perangkat Lunak Metode pengembangan perangkat lunak yang digunakan adalah sistem selesai dibangun dan diuji coba, proses tersebut akan terus berulang karena adanya tambahan data-data baru. 1.8 Sistematika Penulisan Sistematika penyusunan dalam skripsi ini merupakan gambaran umum yang mencakup format-format skripsi. Sistematikanya sebagai berikut: BAB I PENDAHULUAN Berisi penjelasan latar belakang, rumusan masalah, ruang lingkup masalah, tujuan dan metode penelitian. BAB II LANDASAN TEORI Berisi dasar teori yang digunakan dalam penelitian ini. Secara garis besar membahas teori mengenai desain database, PLSQL Oracle, Stored Function, Stored Procedure, Trigger, dan Package dalam oracle. BAB III ANALISIS DAN PERANCANGAN SISTEM Berisi penjelasan tentang Uraian sistem, Diagram Konteks, DFD Level, Diagram berjenjang, CDM , PDM, Desain Sistem Database. BAB IV IMPLEMENTASI SISTEM Berisi penjelasan implementasi dan perancangan sistem informasi yang telah dirancang pada bab sebelumnya. BAB V KESIMPULAN DAN SARAN Berisi kesimpulan dan saran yang didapatkan selama pelaksanaan penelitian.

BAB II DASAR TEORI

2.1 Desain Database Langkah-Langkah Mendesain Database yang baik dan benar adalah : 1. Analisis Persyaratan: Langkah pertama dalam mendesain sebuah aplikasi database adalah memahami dan mengetahui data yang harus disimpan di dalam database, aplikasi apa yang harus dibangun diatasnya, dan jenis operasi apa yang lebih banyak digunakan, dan subjek untuk melakukan persyaratan yang ada. Dengan kata lain, kita harus tahu apa yang diinginkan pengguna database tersebut. Biasanya ini adalah sebuah proses informal yang melibatkan partisipasi kelompok pengguna, studi tentang lingkungan pegoprasian saat ini dan bagaimana perkiraan perubahan lingkungan tersebut, analisis dokumen yang ada dalam suatu aplikasi yang diharapkan akan diganti atau dilengkapi oleh database, dan seterusnya. Banyak metodologi yang diusulkan untuk menyusun dan menampilkan informasi yang dikumpulkan pada langkah tersebut. Beberapa alat otomatis pun telah dikembangkan untuk mendukung proses ini. 2. Desain Database Konseptual: Informasi dikumpulkan pada saat analisis persyaratan digunakan untuk mengembangkan deskripsi data tingkat tinggi yang harus disimpan dalam database, bersama dengan batasan yang telah diketahui untuk menetapkan penyimpanan data tersebut. Langkah ini sering dilakukan dengan menggunkan model ER. Model ER adalah salah satu dari model data tingkat tinggi, atau semantik, yang digunakan dalam desain database. Tujuannya adalah menciptakan gambaran sederhana tentang data yang mirip dengan pemikiran pengguna dan pengembang mengenai data tersebut (orang dan proses yang dinyatakan dalam data tersebut). Hal tersebut menfasilitasi diskusi di antara orang-orang yang terlibat dalam proses desain, bahkan mereka yang tidak mempunyai latar belakang teknis. Pada saat yang sama, desain awal harus akurat untuk membantu ketapatan translasi ke dalam sebuah model data yang didukung oleh sistem database komersial (yang dalam prakteknya berarti model relasional). 3. Desain Database Logika: Kita harus memilih sebuah DBMS untuk

mengimplementasikan desain database kita, dan mengubah konsep desain database menjadi sebuah skema database dalam model data dari DBMS terpilih. Kitah hanya akan memperhatikan DBMS relasional, dan dengan demikian tugas desain logika adalah mengubah skema ER menjadi skema database relasional. 4. Perbaikan Skema: Langkah keempat dalam desain dataase adalah analisis sekumpulan relasi dalam skema database relasional untuk mengidentifikasi permasalahan yang muncul, dan memperbaikinya. Berbeda dengan alaisis persyaratan dan langkah-langkah desain konseptual, yang secara esensial bersifat subjektif, perbaikan skema dapat dipandu oleh beberapa teori yang kuat dan bagus. Langkah keempat ini, para akademis IT lebih sering disebut dengan Normalisasi. 5. Desain Database Fisik: pada langkah ini, kita juga mempertimbagkan beban kerja umum yang diharapkan dapat didukung oleh datagbase kita dan memperbaiki deswain database di masa mendatang untuk memastikan terpenuhinya kriteria performa yang diinginkan. Langkah ini hanya mencakup pembuatan indeks pada beberapa tabe dan mengelompokkan beberapa tabel, atau bahkan melibatkan desain ulang yang substansial terhadap beberapa bagian skema database yang didapat dari langkah pertama desain database. 6. Desain Aplikasi dan Keamanan: Semua proyek perangkat lunak yang melibatkan sebuah DBMS harus mempertimbangkan aspek aplikasi yang berada di luar database itu sendiri. Metodologi desain seperti UML mencoba menekankan desain perangkat lunak dan siklus pengembangan yang lengkap. Secara singkat, kita harus bisa mengidentifikasi entitas (contohnya pengguna, grup-grup pengguna, dan bagian-bagian lain) dan proses-proses yang terlibat dalam aplikasi. Kita harus menggambarkan peran setiap entitas dalam setiap proses yang akan direfleksikan pada beberapa tugas aplikasi, sebagai bagian dari aliran kerja lengkap untuk tugas tersebut. Untuk tiap peran, kita harus bisa mengidentifikasi bagian database yang harus bisa diakses dan yang tidak bisa diakses, dan kitah harus bisa menganmbil langkah untuk memastikan bahwa aturan akses terseut dilakukan. DBMS memberikan beberapa mekanisme untuk membantulangkahtersebut.

Demikianlah langkah-langkah desain database yang harus kita lakukan jika kita ingin membangun sebuah database yang baik dan benar. Secara realistis, meskipun kita mulai dari proses 6 langkah diatas, sebuah desain database yang lengkap mungkin akan memerlukan sebuah fase tuning (penyesuaian) sesudah itu sampai desain tersebut memuaskan. 2.2 PLSQL Oracle 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 : PL/SQL dapat digunakan di server sehingga client hanya dapat mengakses didalam server. Penggunaan PL/SQL mudah dimengerti oleh setiap pengguna. PL/SQL dapat didesain khusus untuk database Oracle dalam menggunakan program aplikasi. 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 : 1 2 > Declare > Begin

3 4

> Exception > End

Pemanggilan PL/SQL : Langsung dari SQL Plus Dari Aplikasi Dari PL/SQL lainnya Aturan penulisan: Dapat ditulis dalam beberapa baris (tidak harus dalam satu baris perintah) . Dapat berupa nested blok Karakter dan literal diapit oleh tanda kutip Setiap perintah/blok diakhiri dengan titik koma(;) Komentar diawali dengan tanda min dua kali(--) atau diapit dengan tanda /**/ Pemberian nilai menggunakan := Dapat menggunakan Bind Variable Tanda garis miring(/) berarti run Contoh PL/SQL : Sub Program : a. Nama dari blok PL/SQL yang dapat menerima parameter dan dapat dipanggil terdapat dua jenis: Sebuah prosedur yang digunakan untuk melakukan suatu kegiatan tertentu Sebuah fungsi yang digunakan untuk menghitung suatu nilai b. Menggunakan struktur blok PL/SQL standart c. Modular dapat dipergunakan berulang-ulang, ditingkatkan/dikembangkan dan mudah dalam perawatan. Struktur diatas dapat dijelaskan sebagai berikut : 1. 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. 2. 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. 3. Bagian Eksekusi (Execution) Bagian ini memuat pernyataan-pernyataan PL/SQL yang akan ditulis. Bagian eksekusi ini harus dimulai dengan perintah BEGIN. 4. 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. Bentuk Umum Struktur PL/SQL 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; DBMS_OUTPUT Merupakan paket yang disediakan oleh Oracle PL / SQL dan PUT_LINE merupakan salah satu prosedur yang dikemas. Menampilkan nilai-nilai pada SQL Plus * terminal yang harus diaktifkan dengan SERVEROUTPUT SET ON terlebih dahulu. Untuk menjalankan kode sampel ini, login ke SQL * Plus. PL / SQL blok diakhiri dengan tanda garis miring / atau garis byitself. Tipe Data a. Tipe Data dasar :

Numerik NUMBER, BINARY_INTEGER, DEC, DOUBLE PRECISION, INTEGER, INT, NUMERIC. Karakter VARCHAR2, CHAR, LONG DATE BOOLEAN 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. Variabel dan Konstanta Pada bagian deklarasi ditempatkan variable dan konstanta yang dipakai oleh pernyataan PL/SQL yang dibuat.

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]; 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; Komentar Digunakan untuk memudahkan proses maintenance Jenis komentar : /* ... */ : untuk beberapa baris komentar -- ... : untuk satu bari komentar Contoh : /* Ini adalah komentar Oracle */ -- Ini juga komentar Oracle

PL/SQL (Procedural Language/Structure Query Language) adalah suatu blok yang berisi skrip-skrip bahasa prosedural. PL/SQL merupakan bahasa pemrograman procedural. PL/SQL dapat meningkatkan kinerja database Struktur Blok PL/SQL Terdapat tiga bagian : Bagian pendeklarasian tipe data (opsional) Bagian penulisan perintah Bagian eksepsi (opsional) Khusus bagi oracle, ada istilah PL/SQL. PL/SQL yang merupakan singkatan dari Procedural Language/Structured Query Language merupakan sebuah penggabungan antara bahasa pemrograman prosedural (PL) dan SQL syntax. Jika digambarkan sebagai berikut : Jadi dengan PL/SQL kita tidak perlu menggunakan sebuah bahasa pemrograman sendiri. Fungsi-fungsi standard di bahasa pemrograman sudah ada di sini dan bisa langsung digabung dengan perintah SQL untuk memanipulasi database. Tapi PL/SQL cuma ada di database oracle saja PL / SQL mendukung variabel, kondisi, loop dan pengecualian. Array juga didukung, meskipun dengan cara yang agak tidak biasa, yang melibatkan penggunaan PL / SQL koleksi. PL / SQL koleksi adalah topik yang agak maju. Implementasi dari versi 8 dan seterusnya Oracle Database telah memasukkan fitur yang berhubungan dengan objek-orientasi. PL / SQL program unit (dasarnya kontainer code) dapat dikompilasi ke database Oracle. Pemrogram sehingga dapat menanamkan PL / SQL unit fungsionalitas ke dalam database secara langsung. Mereka juga dapat menulis skrip yang berisi PL / SQL program unit yang dapat membaca ke database menggunakan alat Oracle SQL * Plus. Setelah unit program telah disimpan ke dalam database, mereka menjadi tersedia untuk eksekusi di lain waktu. Sementara programmer dapat dengan mudah menanamkan Data Manipulation Language (DML) laporan langsung ke / kode mereka PL SQL lurus ke depan dengan menggunakan

statemen SQL, Data Definition Language (DDL) membutuhkan lebih kompleks "Dynamic SQL" pernyataan yang akan ditulis dalam kode / PL SQL. Namun, pernyataan DML mendukung mayoritas PL / SQL code dalam aplikasi perangkat lunak khas. Dalam kasus PL / SQL SQL dinamis, versi awal dari Database Oracle diperlukan penggunaan perpustakaan paket DBMS_SQL rumit Oracle. versi lebih baru memiliki namun memperkenalkan sederhana "Native Dynamic SQL", bersama dengan sintaks terkait. Oracle Corporation lazim menambah fungsionalitas setiap rilis paket dengan berturut-turut dari Database Oracle. DECLARE TYPE / item / FUNCTION / PROCEDURE declarations BEGIN Statements EXCEPTION EXCEPTION handlers END label; Para dan MENYATAKAN dan bagian PENGECUALIAN adalah opsional. Pengecualian, kesalahan yang timbul selama pelaksanaan kode, memiliki satu dari dua jenis: 1. Predefined pengecualian 2. Ditetapkan pengguna pengecualian. Tipe data utama dalam PL / SQL termasuk NOMOR, INTEGER, CHAR, VARCHAR2, DATE, TIMESTAMP, dll TEKS. Fungsi di PL / SQL adalah kumpulan SQL dan / PL SQL laporan yang melakukan tugas dan harus mengembalikan nilai ke lingkungan menelepon. fungsi yang didefinisikan pengguna digunakan untuk melengkapi ratusan fungsi yang dibangun oleh Oracle. Ada dua jenis fungsi dalam PL / SQL. Fungsi tradisional ditulis dalam bentuk:

CREATE OR REPLACE FUNCTION [(input/output variable declarations)] RETURN return_type [AUTHID ] [declaration block] BEGIN RETURN ; [EXCEPTION EXCEPTION block] RETURN ; END; Penulisan funsi tabel : CREATE OR REPLACE FUNCTION [(input/output variable declarations)] RETURN return_type [AUTHID ] [] [declaration block] BEGIN PIPE ROW ; RETURN; [EXCEPTION EXCEPTION block] PIPE ROW ; RETURN; END; Numeric variables variable_name NUMBER(P[,S]) := VALUE; untuk mendefinisikan sebuah variabel numerik, programmer menambahkan para NOMOR tipe variabel dengan definisi nama. Untuk menentukan presisi (opsional)

(P) dan skala (opsional) (S), salah satu lebih lanjut dapat menambahkan ini dalam kurung bulat, dipisahkan dengan koma. ("Precision" dalam konteks ini mengacu pada jumlah digit yang variabel dapat menahan, "skala" mengacu pada jumlah digit yang dapat mengikuti titik desimal.) Sebuah pilihan tipe data lain untuk variabel numerik akan mencakup: binary_float, binary_double, Desember, desimal presisi, double, float, integer, int, numerik, nyata, smallint, binary_integer. Character variables variable_name VARCHAR2(L) := 'Text'; Untuk mendefinisikan sebuah variabel karakter, programmer biasanya menambahkan para VARCHAR2 tipe variabel dengan definisi nama. Ada berikut dalam kurung jumlah karakter maksimum yang dapat menyimpan variabel. Tipe data lain untuk variabel karakter meliputi: varchar, char, panjang, mentah, panjang mentah, nchar, nchar2, CLOB, gumpalan, bfile PL / SQL fungsi analogi ke tertanam bahasa prosedural yang terkait dengan database relasional lainnya. Sybase ASE dan Microsoft SQL Server telah Transact-SQL, PostgreSQL memiliki PL / DB2 pgsql (yang mencoba untuk meniru PL / SQL ke mana), dan IBM termasuk SQL prosedural Bahasa, [3] yang sesuai dengan / standar SQL ISO SQL PSM . Para desainer dari PL / SQL model sintaks pada bahwa Ada. Baik Ada dan PL / SQL memiliki Pascal sebagai nenek moyang yang sama, dan PL / SQL juga menyerupai Pascal dalam berbagai aspek. Struktur paket / PL SQL mirip struktur Pascal program dasar atau unit Borland Delphi. Pemrogram dapat mendefinisikan data global-jenis, konstanta dan variable statis, publik dan swasta, dalam sebuah paket / PL SQL. PL / SQL juga memungkinkan untuk definisi kelas dan instantiate ini sebagai obyek dalam PL / SQL code. Ini menyerupai penggunaan dalam bahasa pemrograman berorientasi objek seperti Object Pascal, C dan Java. PL / SQL merujuk kepada kelas sebagai suatu "Abstrak Data Type" (ADT) atau "User Defined Type" (UDT), dan mendefinisikan sebagai tipe data SQL Oracle-sebagai lawan jenis /

PL SQL yang ditetapkan pengguna, yang memungkinkan yang digunakan baik dalam Engine Oracle SQL dan Oracle PL / SQL engine. Constructor dan metode dari Tipe Data Abstrak ditulis dalam PL / SQL. The Tipe Data Abstrak dihasilkan dapat beroperasi sebagai kelas objek dalam PL / SQL. objek tersebut juga dapat bertahan sebagai nilai-nilai kolom dalam tabel database Oracle. PL / SQL pada dasarnya berbeda dari Transact-SQL, meskipun kesamaan dangkal. Porting kode dari satu ke yang lain biasanya melibatkan kerja non-sepele, bukan hanya karena perbedaan dalam fitur set dari dua bahasa, tetapi juga karena perbedaan yang sangat signifikan dalam cara menangani Oracle dan SQL Server dengan concurrency dan penguncian. Proyek Fyracle bertujuan untuk memungkinkan eksekusi PL / SQL code dalam open-source database Firebird. Struktur Kontrol PL/SQL Pembahasan kali ini menunjukkan kepada kita bagaimana menyusun aliran control melalui program PL/SQL. Kita akan mempelajari bagaimana perintahperintah dihubungkan dengan struktur-struktur kontrol sederhana namun powerful, yang memiliki single entry dan exit point. Secara bersama-sama, struktur-struktur ini dapat menangani berbagai situasi. Penggunaan yang tepat akan menghasilkan program terstruktur yang baik. Gambaran Struktur Kontrol PL/SQL Berdasarkan structure theorem, setiap program komputer dapat ditulis menggunakan struktur kontrol dasar yang ditunjukkan dalam Gambar 4-1. Mereka dapat dikombinasikan dalam suatu cara yang diperlukan untuk menjawab permasalahan-permasalahan yang ada.

Gambar 2.2.1 Struktur-Struktur Kontrol

Struktur seleksi menguji kondisi, lalu mengeksekusi satu rangkaian perintahperintah 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). Struktur perulangan mengeksekusi rangkaian perintah-perintah secara berulang-ulang selama suatu kondisi bernilai true. Struktur sekuensial (berurutan) secara sederhana mengeksekusi rangkaian perintah-perintah dalam urutan. PL/SQL adalah peningkatan perintah SQL dalam bentuk pemrograman procedural. DML dan SELECT dari perintah SQL berada dalam PL/SQL. PL/SQL Engine akan memecah perintah blok PL/SQL menjadi PL/SQL (dikerjakan oleh Procedural Statement Executor dari PL/SQL Engine) dan SQL (dikerjakan oleh SQL Statement Executor dari Oracle Server). Keuntungan Penggunaan PL/SQL Integrasi Memungkinkan Aplikasi dan Oracle Server menggunakan Library yang dapat digunakan bersama-sama dalam bentuk stored procedure Peningkatan Kinerja Penggunaan PL/SQL, memungkinkan pengiriman perintah secara blok dalam

satu perintah yang secara drastis dapat menurunkan trafik jaringan Modular. Bentuk modular memungkinkan banyak kemudahan yang dapat diperoleh 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. 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 Dapat menggunakan Struktur Kontrol :LOOP, FOR, WHILE Dapat menangani Error Error bisa dihasilkan/dibangkitkan oleh Oracle Server atau bisa dibangkitkan sendiri dengan sengaja Untuk mengantisipasi berbagai hal yang barangkali sulit untuk ditangani secara langsung menggunakan kontrol program

2.3

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.4

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.

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.

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.

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.5TriggerTrigger 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. 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:

Model-model yang digunakan untuk menspesifikasi aturan basis data aktif adalah model ECA (Event-Condition-Action). Aturan dalam model ECA memiliki tiga komponen yaitu: 1 1. 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. 1 2. 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. 1 3. Action Action biasanya berupa statement sql. 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

Contoh 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 2 3 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.6Package OraclePackage 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. Seperti ditunjukkan oleh Gambar 9-1, 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 item-item 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. Keuntungan PL/SQL Packages Packages menawarkan beberapa keuntungan: modularitas, desain aplikasi yang lebih mudah, penyembunyian informasi, tambahan fungsionalitas, dan performa yang lebih baik. 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 pemKomputer aplikasi.

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 di-compile juga. Kita tidak perlu

mendefinisikan package bodies secara penuh sampai kita siap untuk menyelesaikan aplikasi. 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. 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. 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.

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, ...); Batasan-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. Memahami Packages Body 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. 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.