100030149-pl-sql
TRANSCRIPT
PRAKTIKUM SISTEM BASIS DATA IIPL / SQL
Oleh :
Nama : I Gd Edy Artana NIM : 100030149 Program : Strata Satu (S1) Jurusan : Sistem Informasi
SEKOLAH TINGGI MANAJEMEN INFORMATIKADAN TEKNIK KOMPUTER
(STMIK) STIKOM BALI2013
Daftar Isi
Daftar Isi......................................................................................................... ii
Daftar Gambar............................................................................................... iii
1. Pengenalan PL ( Prosedural Language )..........................................1
1. Struktur PL/SQL.............................................................................2
2. Bentuk Umum Struktur PL/SQL........................................................5
2. DBMS_OUTPUT............................................................................6
3. Tipe Data.......................................................................................6
4. Variabel dan Konstanta.................................................................7
3. Struktur Blok PL/SQL......................................................................11
4. Tabel PL/SQL.................................................................................12
5. PL/SQL...........................................................................................19
6. DBA_SOURCE...............................................................................22
7. Keuntungan Penggunaan PL/SQL..................................................23
Daftar Pustaka..............................................................................................25
Daftar Gambar
Gambar 1 Logika SQL................................................................................1
Gambar 2 Print Screen Struktur PL/SQL....................................................6
Gambar 3 Print Screen Komentar.............................................................10
iii
1. Pengenalan PL ( Prosedural Language )
Structured query language (SQL) merupakan bahasa untuk
berkomunikasi dengan database relasional yang bersifat deklaratif
(bukan prosedural) dengan menyatakn hasil (bukan cara
memperoleh hasil ).
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.
Bagi seorang programmer, menguasai SQL adalah sebuah
kewajiban, karena program jaman sekarang pasti menggunakan
database untuk menyimpan datanya. Bagi saya sendiri yang bisa
menggunakan program PHP, biasa menggunakan database mysql
Gambar 1 Logika SQL
dan oracle. Jadi untuk membuat sebuah aplikasi saya
menggunakan program PHP dan database.
Sementara 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.
1. Struktur PL/SQL
PL/SQL merupakan bahasa block-structured (berstruktur
blok). Yaitu bahwa unit-unit dasar (procedure, function, dan blok
tanpa nama (anonymous block)) yang membentuk program
PL/SQL merupakan blok logikal, yang mana dapat berisi
beberapa sub-sub blok bersarang (nested-blocks). Dengan
demikian, PL/SQL mendukung pendekatan divide-and-conquer
(membagi dan mengatasi) untuk penyelesaian masalah yang
disebut dengan stepwiserefinement.
2
[DECLARE
………declarations]
BEGIN
………statements
[EXCEPTION
………handlers]
Blok (atau sub-blok) mengijinkan kita untuk
mengelompokkan secara logikaldeklarasi-deklarasi dan
perintah-perintah yang terkait. Blok PL/SQL memiliki tiga
bagian:bagian declarative, bagian executable, dan bagian
exception-handling. (Dalam PL/SQL, peringatan dan kondisi
error disebut dengan exception). Bagian executable merupakan
bagianyang mutlak harus ada pada suatu blok 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
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(;)
3
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:
o Sebuah prosedur yang digunakan untuk melakukan
suatu kegiatan tertentu
o 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.
d. Semua program PL/SQL harus mengikuti struktur
pemrograman sebagai berikut :
o 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 (Retrun) jika blok adalah fungsi.
o Bagian Deklarasi (Declaration)
Bagian ini untuk membuat deklarasi mengenai semua
variable dan konstanta yang direferensikan dalam
pernyataan PL/SQL. Bagian deklarasi ini dimulai
dengan perinyah DECLARE. Jika tidak ada variable
atau konstanta yang ingin dideklarasikan, bagian ini
boleh dihilangkan.
4
o Bagian Eksekusi (Execution)
Bagian ini memuat pernyataan-pernyataan PL/SQL
yang akan ditulis. Bagian eksekusi ini harus dimulai
dengan perintah BEGIN.
o Bagian Perkecualian (Exception)
Bagian ini memuat cara menangani kesalahan-
kesalahan (error) pada waktu eksekusi program
PL/SQL. 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. Bentuk Umum Struktur PL/SQL
5
DECLARE variabel tipe_data; konstanta CONSTANT tipe_data := nilai;
... BEGIN
statement_1; statement_2;
... EXCEPTION WHEN nama_eksepsi THEN statement_untuk_mengatasi_error;
1. ... 2. END;
Gambar 2 Print Screen Struktur PL/SQL
2. 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.
3. Tipe Data
a. Tipe Data dasar :
- Numerik
- NUMBER, BINARY_INTEGER, DEC, DOUBLE
PRECISION, INTEGER, INT,
- NUMERIC.
- Karakter
- VARCHAR2, CHAR, LONG
6
- 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
variabelyang 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.
4. 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
7
Bentuk Umum :
variable_name datatype [NOT NULL := value ];
Keterangan :
o Variable_name adalah nama variabel.
o Datatype adalah valid PL / SQL datatype.
o NOT NULL adalah sebuah spesifikasi opsional pada
variabel.
o Nilai atau DEFAULT juga merupakan spesifikasi
opsional, di mana anda bisa menginisialisasi variabel.
o Setiap deklarasi variabel adalah pernyataan terpisah
dan harus diakhiri dengan titik koma.
Contoh Deklarasi Variabel :
Ketika variabel ditetapkan sebagai TIDAK NULL, Anda harus
menginisialisasi variable ketika dideklarasikan. Contoh di bawah ini
menyatakan dua variabel, salah satunya adalah tidak null.
8
DECLARE X integer; Alamat varchar2(40); No_induk char(8);
..... BEGIN
X := 12; Alamat := „HAYAM WURUK 41, Denpasar‟; No_induk := „IDD12345‟;
END;
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:
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 :
9
SELECT column_name
INTO variable_name
FROM table_name
[WHERE condition];
DECLARE
pi CONSTANT real := 3.14;
lebar CONSTANT integer := 100;
Komentar
Digunakan untuk memudahkan proses maintenance
Jenis komentar :
Contoh :
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.
3. Struktur Blok PL/SQL
Terdapat tiga bagian :
10
/* ... */ : untuk beberapa baris komentar
-- ... : untuk satu bari komentar
/* Ini adalah komentar Oracle */
-- Ini juga komentar Oracle
Gambar 3 Print Screen Komentar
1. Bagian pendeklarasian tipe data (opsional)
2. Bagian penulisan perintah
3. Bagian eksepsi (opsional)
B. Bagian Deklarasi
Pada bagian ini ditempatkan deklarasi semua variable dan
konstanta (constant) yang akan dipakai oleh pernyataan PL/SQL
yang dibuat.
Perbedaan variable dengan konstanta adalah :
Konstanta (constant) – nilai ditentukan pada saat deklarasi dibuat
sehingga nilainya tetap pada saat program dieksekusikan. Variabel –
dapat menerima nilai baru atau nilainya diubah pada saat program
dieksekusikan. Waktu mendeklarasikan suatu variable atau konstanta,
harus ditentukan tipe data yang akan dipakai. Sehingga pada waktu
mendeklarasikan variable atau konstanta, tipe data SQL dapat dipakai. Di
samping tipe data SQL, PL/SQL mendukung sejumlah tipe datanya sendiri
sebagai berikut :
a. BOOLEAN – dipakai untuk menyatakan data logika, yaitu TRUE
(benar), FALSE (salah), dan NULL (kosong).
b. BINARY_INTEGER – digunakan untuk mendeklarasikan bilangan
yang tidak mempunyai angka decimal. Tipe data NATURAL dan
POSITIVE merupakan subset dari BINARY_-INTEGER.
c. %TYPE – tipe data ini jika dipakai menandakan bahwa veriabel
yang dideklarasikan sama dengan tipe data dari kolom table
tertentu. Ini mempermudah deklarasi variable untuk menghitung
tipe data kolom-kolom table yang sudah dibuat.
d. %ROWTYPE - tipe data ini menandakan bahwa sekelompok
variable tertentu adalah sama dengan tipe data dari row suatu table
tertentu.
e. Table dan Record – tipe data komposit (composite datatype) untuk
pemakaian yang lebihkompleks.
11
Contoh deklarasi konstanta :
Contoh deklarasi variable :
Pada saat deklarasi, panjang tipe data dapat ditentukan (bounded) atau
tidak (unbounded). Jika ditentukan, maka jumlah memori yang
dialokasikan untuk tipe data tersebut juga ditentukan sesuai dengan
deklarasi.
4. Tabel PL/SQL
Tabel PL/SQL sebetulnya dapat diibaratkan semacam array satu
dimensi yang mempunyai satu kolom tunggal yang nilai-nilai datanya
diakses dengan menggunakan indeks. Indeks yang dapat dipakai hanya
satu tipe yaitu BINARY_INTEGER.
Perlu diperhatikan bahwa table PL/SQL tidak sama dengan table SQL
yang dapat memilki banyak kolom-kolom dan memiliki relational integrity.
Kegunaan table PL/SQL adalah untuk menampung data-data yang
dihasilkan oleh program PL/SQL.
Karena PL/SQL tidak menyediakan fasilitas input/output sendiri, maka
hasil yang didapat oleh PL/SQL tidak begitu saja diakses oleh seorang
pemakai atau program lain. Untuk itu Oracle menyediakan dua cara untuk
12
DECLARE Temperatur_asal Nilai_mula NUMBER := 0; NUMBER (2) := 100;
DECLARE Temperatur Nama Alamat NUMBER (3.2); VARCHAR2 (30); %TYPE;
mengakses data-data yang dihasilkan oleh PL/SQL, yaitu dengan
menggunakan paket DBMS_OUTPUT.
Syntax yang harus digunakan untuk mendeklarasikan table PL/SQL
adalah :
Record PL/SQL
Record PL/SQL adalah tipe data komposit lain yang dapat dideklarasikan
dengan syntax sebagai berikut :
Record ini menggunakan tiga kolom dari table pembeli yang sudah ada
dan satu kolom baru yang tidak ada didalam table pembeli.
C. Bagian Eksekusi
13
TYPE nama_tipe IS TABLE O nama_tabel .nama_kolom%TYPE INDEX BY BINARY_INTEGER;
Contoh mendeklarasikan table PL/SQL :
DECLARE TYPE tipr_no_pembeli IS TABLE OF Pembeli .no_pembeli%TYPE INDEX BY BINARY_INTEGER;
DECLARE
TYPE
(no_pembeli record_no_pembeli IS
RECORD
nama_pembeli pembeli .no_pembeli
%TYPE,
alamat pembeli .nama%TYPE
gaji number (10) ) ;
Pada bagian ini pernyataan PL/SQL akan kita buat yang menentukan
tujuan program PL/SQL dibuat. Pernyataan pada bagian ini dapat
digolongkan atas :
a. Pernyataan Penentuan (Assignment)
Pernyataan penentuan umumnya ditandai dengan
penggunaan operator sama-dengan (:=) seperti contoh :
nomer_awal := 1;
nomer_akhir := 100;
temp := tem + 1;
temp_c := (5/9)*(temp_f – 32);
b. Pernyataan Flow Control
Pernyataan flow control ini merupakan pernyataan yang
paling sering dipakai untuk mengatur langkah-langkah suatu
program. Operator relasi yang dapat digunakan antara lain :
IF, ELSE, ELSEIF
LOOP, END LOOP
EXIT, EXIT WHEN
WHILE LOOP, END LOOP
FOR LOOP, END LOOP
GOTO
NULL
Catatan:
Operasi-operasi relasi juga merupakan kata-kunci yang tidak boleh
digunakan sebagai nama variable pada pembuatan deklarasi
program PL/SQL.
Contoh pernyataan flow control dengan perintah IF dan ELSE :
IF harga > 200000000 THEN
Diskon := harga * 0.1;
END IF
IF harga > 200000000 THEN
14
Diskon := harga * 0.1;
ELSEIF
Harga > 150000000 AND
Harga < 200000000 THEN
Diskon := harga * 0.75;
ELSE
DISKON := 0;
END IF;
Contoh flow control dengan perintah LOOP :
LOOP
i =: i + 1;
INSERT INTO jumlah_qty(id, qtyot)
EXIT WHEN i = 10; END LOOP;
VALUES (i, qty);
Contoh dengan numeric loop :
FOR I IN 1 .. 10
LOOP
DBMS_OUTPUT.PUT_LINE(I);
END LOOP;
Catatan : Program ini akan membuat loop sepuluh kali.
Pernyataan SQL
Pernyataan-pernyataan SQL dapat disisipkan di dalam suatu
program PL/SQL. Dengan menyisipkan pernyataan SQL tersebut,
program PL/SQL dapat memproses data table dengan mudah seperti
contoh berikut :
IF temp := 0 THEN
INSERT INTO
tabel_temp (nomer, date)
VALUES
(temp, sysdate);
END IF
15
Program ini akan mengisi table bernama “table_temp”, jika nilai temp = 0
dengan menggunakan perintah INSERT.
Pernyataan Kursor
Jika mengeksekusikan suatu pernyataan SQL lewat PL/SQL,
Oracle akan menciptakan suatu ruang kerja pribadi yang dinamakan PGA.
Di dlam ruang ini data yang dikembalikan oleh pernyataan SQL akan
disimpan.
Nama Kursor adalah suatu pointer (penunjuk) ke ruang tersebut. Sebelum
dapat dipakai, kursor harus dideklarasikan dahulu seperti contoh :
DECLARE CURSOR c_pembeli IS
SELECT *
FROM pembeli
Kursor “c_pembeli” ini akan merupakan pointer ke ruang kerja pribadi di
mana hasil pernyataan “SQL SELECT * FROM pembeli” disimpan. Semua
nama kursor yang dideklarasikan pada suatu program PL/SQL disebut
kursor eksplisit. Karena ada pula kursor yang dinamakan kursor implisit
berupa setiap pernyataan SQL yang dieksekusi oleh PL/SQL.
Pada pembuatan kursor eksplisit, kolom-kolom yang ingin dipanggil oleh
perintah SELECT dapat di tentukan seperti contoh :
DECLARE CURSOR c_pembeli IS
SELECT no_pembeli, nama, alamat
FROM pembeli;
D. Bagian Exception
Bagian perkecualian ini perlu dibuat jika pernyataan PL/SQL
mengembalikan hasil jika kesalahan (error) pada saat program
dieksekusikan. PL/SQL menyediakan sejumlah exception siap pakai
sebagai berikut :
• DUP_VAL_ON_INDEX
16
• INVALID_NUMBER
• NO_DATA_FOUND
• TOO_MANY_ROWS
• VALUE_ERROR
Disamping itu exception dapat didefinisikan sendiri (pre-defined exception)
yang dapat dipanggil dengan perintah RAISE di dalam program PL/SQL.
Sedangkan pre-defined exception akan dipanggil secara otomatis jika
terjadi kesalahan tanpa menggunakan perintah RAISE.
Sintaks untuk bagian exception ini adalah :
EXCEPTION
WHEN nama_exceptional THEN
Pernyataan PL/SQL;
…
WHEN nama_exception THEN
Pernyataan PL/SQL;
END;
E. Cara Mengakses Hasil PL/SQL
Oracle menyediakan dua cara untuk mengakses data-data yang
dihasilkan oleh PL/SQL,yaitu :
• Dengan menggunakan paket DBMS_OUTPUT
• Paket DBMS_OUTPUT ini disediakan oleh oracle untuk digunakan
dengan SQL*PLUS.
Paket ini terdiri atas sejumlah prosedur dan fungsi siap pakai yang
mengatur intput/output suatu data untuk digunakan oleh PL/SQL.
Dengan menggunakan Tabel PL/SQL
Contoh penggunaan table PL/SQL pada suatu program PL/SQL :
1 SQL> DECLARE
2 TYPE tupe_no_pembeli IS TABLE OF
3 Pembeli.no_pembeli%TYPE
4 INDEX BY BINARY_INTEGER;
17
5
6
7 no_pembeli_ind tipe_no_pembeli;
8 ind BINARY_INTEGER := 0;
9 akhir BINARY_INTEGER;
10
11 BEGIN
12
13 DBMS_OUTPUT . ENABLE;
14
15 FOR catatan_no_pembeli IN (SELECT no_pembeli
16
17 LOOP
18 ind :+ ind +1;
19 no_pembeli_ind(ind):=catatan_no_pembeli.no_pembeli;
20 END LOOP;
21
22 Akhir := ind;
23
24 FOR ind 1 .. akhir
25
26 LOOP
27 Dbms_output.put_line (‘no_pembeli_ind(‘ || TO CHAR (ind)
28 || ‘) = ‘ || no_pembeli_ind (ind));
29
30 END LOOP;
31 END;
Jika program PL/SQL tersebut dieksekusikan, akan tampil hasil sebagai
berikut :
SQL > /
No_pembeli_ind(1) = 5001
No_pembeli_ind(1) = 5002
18
No_pembeli_ind(1) = 5003
No_pembeli_ind(1) = 5004
No_pembeli_ind(1) = 5005
Contoh diatas memperlihatkan cara menggunakan table PL/SQL yang
hasilnya diakses oleh program PL/SQL dan ditampilkan oleh paket
DBMS_OUTPUT.
5. PL/SQL
Pl/sql mengombinasikan kemampuan manipulasi data sql dengan
kemampuan bahasa procedural,dengan kata lain pl/sql adalah sql
ditambah procedural language. Pl/sql merupakan bahasa berstruktur blog
yang berupa
fungsi, prosedur, dan blok anonym. Suatublok biasanya ditujukan untu
menyelesaikan suatu tugas tertentu dan suatu blok boleh memliki sub-blok
(nested). Struktur blok pl/sql itu terdiri dari bagian deklarasi, bagian kode
program, dan bagian eksepsi untuk penanganan eror seperti Nampak di
bawah ini:
[DECLARE
Declarasi variable]
BEGIN
Kode program
[EXCEPTION
Penanganan error]
END;
Selain membuat fungsi dan prosedur, pl/sql juga digunakan untuk
menghasilkan untuk mengelompokkan fungsi dan prsedur, serta untuk
pembuatan kode program dalam trigger. Tentu saja defeloper akan sering
memanfaatkan pl/sql untuk membuat modul atau program baik yang
dilakukan melalui SQL * Plus, Form Builder, Prosedural Builder, maupun
Oracle Portal.
Blok pl/sql anonym
19
Blok pl/sql anonym adalah blok pl/sql tanpa nama dan tidak
menggunakan parameter. Blok anonym tidak disimpan dalam database
swhinggan tidak bisa direferensi oleh blok pl/swql lain.Pada saat blok ini
dijalankan pertama kali,menempatannya shared pool harus didahului
dengan proses parsing dan kompilasi. Proses reparsing dan frekompilasi
tidak dilakukan jika blok telas berada di shared pool.
Apabila blok pl/sql itu telah dikeluuarkan dari shared pool, eksekusi ulang
terhadap blok pl/sql tadi arus melalui tehapad parsing dan kompilasi.
Inidesebabkan blok pl/sql tidak disimpan di database meskipun blok itu
bisa disimpan pada file system operasi.
Dalam pemrograman reguler, blok blok pl/sql anonim itu dapat diubah
menjadi fungsi, prosedur, atau paket sehingga blok pl/sql bisa direferensi
melalui namanya dan menghindari duplikasipembuatan kode program.
A. Parameter
Sub program dipanggil denhgan melewatkan nilai, variabel,
atau ekspresi seseuai parameter yuang ada. Variabel yang berada
pada statement pemanggil sub program atau yangh disebut
parameter aktual akan dikirimkan ke parameter formmal, yaitu
variabel yang dideklarasikan pada fungsi atatu prosedur yang
dipanggil. Parameter formal dan aktual itu harus memiliki tipe data
yang sama atau kompatibel.
Pemanggilan sub program untuk melewatkan parameter
aktual dapat dilakukan dengan cara notasi posisi parameter, notasi
nama parameter, dan notasi kombinasi. Penetapan notasi posisi
melakukan pemanggiolan sub program berdasarkan posisi atau
urutan parameter formal.
B. Mode parameter
20
Parameter formal menerima nilai atau variabel dari
parameter aktual. Subprogram dapat menggunakan parameter
formal sesuain mode parameter yang ditetapkan yaitu IN, OUT dan
IN OUT. Secara default setiap parameter formal menggunakan
mode IN yang berarti bahwa parameter itu hanya dapat dibaca atau
direferensi dalam body subprogram.
Mode OUT berarti parameter formal hanya dapat ditulis atau
diberikan nilai, sedangkan mode IN OUT memungkinkan parameter
formal untuk dibaca dan ditulis. Jadi untuk dapat mengembal\ikan
berbagai nilai maka subpreogram harus menggunakan mode OUT
ataub mode IN OUT,sedangkan mode IN bersifat seperti konstanta
yang tidakn dapat dimodifikasi dalam bodyprosedur yang dipanggil.
C. Compiler Hint NOCOPY
Proses pengiriman parameter aktual dapat dilakukan dengan
dua cara yaitu by reference dan by value. Pengiriman parameter
aktual secara by reference dilakukan dengan melewatkan
pointervparameter aktual ke parameter formal sehinggan kedua
parameter mereferensi lokasi yang sama. Mekanisme itu
berlanmhgsung pada parameter formal dengan mode IN.
Secara default, pengiriman parameter aktual pada
subprigram yang menggunakan mode OUT dan IN OUT dilakukan
secara by value yaitu nilai parameter aktual dicopykan ke
parameter formal. Setelah eksekusi subperogram diakhiri, nilai
parameter formal akan dikopiakn ke parameter aktual sehingga
nilain parameter aktual berubah. Utnuk mengubah pola pengiriman
by value mengjadi by reference gunakan hint compiler nocopy
sehingga proses copi nilai data dapat dihindari.
Penggunaan copy nilai data antara kedua parameter itu
dapat menurunkan kecepatan eksekusi dan meningkatkan
penggunaan memori terutama pada parameter yang menangani
data berukuran besar seperti record, collection, dan tipe objek.
21
Nocopy menyebabkan perubahan nilai pada parametr formal
segera mempengaruhi nilai parameter aktual. Ini berbeda dengan
kondisi defaultnya dimana jika subprogram berakhir secara tudak
normal maka parameter formal tidak akan dicopy pada parameter
aktual. Sebagai suatu hingt comliper, nocopy melakukan
pengiriman paremeter by reference, sebaiknya pengiriman
pewaremeter aktual dilakuakan secara by value.
6. DBA_SOURCE.
Transaksi otonom adalah transaksi independen (autonomous) yang
tidak berbagi pakai resources dengan transaksi induknya oleh karena itu
rollback pada transaksi induk tidak mempengaruhi status transaksi
otonom (TO) dan commit pada TO akan segera tampak bagi transaksi
lain, serta eksepsi yang terjadi pada transaksi otonom meneyebabkan
rollback pada transaction level bukan statement level.
Transaksi otonom itu tidak dapat melihat perubahan yang belum di commit
dan tidak berbagi pakai penguncian (Locking) dengan transaksi induk.
a. Menetapkan transaksi otonom
Suatu transaksi akan bersifak independen jika terdapat pragma
atau compiler detective autonomous_transaction. Pragma ini
mengionstruksikan compiler pl/sql untuk menandai suatu rutin yang
independent.
b. Kontrol Transaksi otonom
Ketika rutin otonom dijalannkan, transaksi indik ditangguhkan
(suspend) dan dilanjutkan setelah TO berakhir. Perintah commit
dan rollback mengakhiri TO untuk kemudian melanjutkan statement
berikutnya. Statement save point ditransaksi pemanggil tidak
berhubungan dengan save pointy di TO sehinggan rollback ke save
point hanhya dapat dilakukan pada konteks transaksi individual.
Jadi dengan PL/SQL kita tidak perlu menggunakan sebuah bahasa
pemrograman sendiri. Fungsi-fungsi standard di bahasa pemrograman
22
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 databaseOracle. 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.
7. Keuntungan Penggunaan PL/SQL
Integrasi
- Memungkinkan Aplikasi dan Oracle Server menggunakan
Library yang dapat digunakan bersama-sama dalam bentuk
stored procedure
- Peningkatan Kinerja
23
- 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.
24