Anda di halaman 1dari 13

1

Nama: Firda Silvia


NIM: 09650001
Praktikum DBD Kelas I

PL / SQL (Procedure Language / Structure Query Language)
A. PENGERTIAN PL/SQL
PL/SQL versi 1.0 diperkenalkan pertama kali pada oracle database versi 6.0. PL/SQL
memungkinkan penulisan pernyataan kompleks yang tidak dapat dibuat dengan pernyataan SQL.
Namun PL/SQL versi 1.0 sangat terbatas kemampuannya dan setelah mengalami sejumlah
perkembangan dengan dikeluarkannya Oracle database versi 7.0 dan selanjutnya. PL/SQL adalah
fasilitas yang disediakan Oracle sehingga pengguna dapat memanfaatkan konsep pemrograman.
PL/SQL adalah bahasa pemrograman yang digabungkan dengan SQL. 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.
Pada PL/QL versi 2 mulai mendukung paket yang tersimpan(stored packet), prosedur dan fungsi.
Gambar 1.1 Arsitektur PL / SQL
2


Arsitektur PL/SQL terlihat pada gambar 1.1 diatas. Database Oracle memanggil program
kompilasi ke dalam memori dan kemudian PL/SQL engine dan SQL engine mengeksekusi program
yang ada.
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

pl sql
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
B. 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:
<<label>>
DECLARE
TYPE / item / FUNCTION / PROCEDURE declarations
BEGIN
Statements
3

EXCEPTION
EXCEPTION handlers
END label;

Hanya bagian dieksekusi diperlukan. Bagian yang lain adalah opsional SELECT. Satu-
satunya pernyataan SQL diperbolehkan dalam / PL SQL program adalah, INSERT, UPDATE,
DELETE dan beberapa laporan manipulasi data lainnya ditambah beberapa kontrol transaksi.
Namun, pernyataan SELECT memiliki bentuk khusus di mana suatu tuple tunggal ditempatkan di
variabel, lebih lanjut tentang ini nanti.Definisi laporan data seperti CREATE, DROP, atau ALTER
tidak diperbolehkan. Bagian executable juga mengandung konstruksi seperti tugas, cabang, loop,
panggilan prosedur, dan memicu , yang semuanya dijelaskan di bawah ini (kecuali pemicu ). PL /
SQL tidak case sensitive. Komentar gaya C (/ * ... * /) dapat digunakan.
Untuk mengeksekusi PL / SQL program, kita harus mengikuti teks program itu sendiri oleh
Sebuah baris dengan satu titik ("."), Dan kemudian
Sebuah baris dengan run;
Seperti SQL program Oracle, kita dapat memanggil PL / SQL program baik dengan
mengetik di sqlplus atau dengan menempatkan kode di file dan memanggil file dalam berbagai
cara kita pelajari dalam Memulai Dengan Oracle .
C. VARIABEL DAN TIPE
Informasi ditransmisikan antara SQL / PL dan program database melalui variabel. Variabel
Setiap jenis tertentu yang terkait dengannya. jenis tersebut dapat:
Salah satu tipe yang digunakan oleh SQL untuk kolom database
Suatu jenis generik yang digunakan dalam PL / SQL seperti NUMBER
Deklarasi sama dengan jenis dari beberapa kolom database
Generik yang digunakan jenis yang paling umum adalah NUMBER. Variabel dari tipe NUMBER
dapat terus salah satu integer atau bilangan real. Karakter string tipe yang paling umum digunakan
adalah VARCHAR (n), dimana n adalah panjang maksimal string dalam bytes. Panjang ini
diperlukan, dan tidak ada default. Sebagai contoh, kita dapat mendeklarasikan:
4


DECLARE
price NUMBER;

myBeer VARCHAR(20);
Perhatikan bahwa PL / SQL memungkinkan variabel boolean, meskipun Oracle tidak
mendukung boolean sebagai tipe untuk kolom database.
Jenis dalam PL / SQL bisa rumit. Dalam banyak kasus, PL / SQL variabel akan digunakan
untuk memanipulasi data yang tersimpan dalam suatu hubungan yang ada. Dalam hal ini, adalah
penting bahwa variabel memiliki tipe yang sama seperti kolom hubungan. Jika ada mismatch tipe,
variabel tugas dan perbandingan mungkin tidak bekerja seperti yang Anda harapkan. Untuk
amannya, bukan hard coding jenis variabel, anda harus menggunakan %TYPE operator. Sebagai
contoh:
DECLARE

myBeer Beers.name%TYPE;

Memberikan PL / SQL myBeer variabel jenis apapun yang dideklarasikan untuk nama kolom dalam
kaitannya Beers.
Sebuah variabel juga mungkin memiliki tipe yang merupakan rekor dengan beberapa bidang
nama. sederhana Cara untuk mendeklarasikan variabel tersebut menggunakan %ROWTYPE pada relasi.
Hasilnya adalah tipe record di mana bidang memiliki nama yang sama dan tipe sebagai atribut
relasi. Sebagai contoh:
DECLARE

beerTuple Beers%ROWTYPE;
Membuat variable beerTuple menjadi sebuah record dengan name and manufacture ,
dengan asumsi bahwa relasi memiliki skema Beers (name, manufacture.
5

Nilai awal variabel, apapun jenisnya, adalah NULL. Kita bisa memberikan nilai pada
variabel, menggunakan ": =" operator. Tugas ini dapat terjadi baik segera setelah jenis variabel
dinyatakan, atau di mana saja di bagian executable program. Contohnya:
DECLARE
a NUMBER := 3;
BEGIN

a := a + 1
END;
.
run;
Program ini tidak berpengaruh ketika dijalankan, karena tidak ada perubahan ke database.
Tipe Data dasar :
Numerik
NUMBER, BINARY_INTEGER, DEC, DOUBLE PRECISION, INTEGER, INT, NUMERIC,
REAL, SMALLINT
Karakter
VARCHAR2, CHAR, LONG
DATE
BOOLEAN
ROWID
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
dataNATURAL dan POSITIVE merupakan subset dariBINARY_INTEGER.
3. %TYPE
6

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 darirow
suatu tabel tertentu.
5. Tabel dan Record
Tipe data komposit untuk pemakaian yang lebih kompleks.
D. Kontrol Aliran dalam PL / SQL
PL / SQL memungkinkan Anda untuk cabang dan membuat loop dalam cara yang cukup akrab.
Sebuah pernyataan IF terlihat seperti:
IF <condition> THEN <statement_list> ELSE <statement_list> END IF;

Bagian ELSE adalah opsional. Jika Anda ingin cabang multiway, gunakan:

IF <condition_1> THEN ...
ELSIF <condition_2> THEN ...
... ... ... ...

ELSIF <condition_n> THEN ...
ELSE ...

END IF;

Berikut ini adalah contoh, sedikit dimodifikasi dari yang sebelumnya, di mana sekarang kita
hanya melakukan penyisipan jika komponen kedua adalah 1. Jika tidak, pertama kita menambahkan
10 untuk setiap komponen dan kemudian masukkan:
DECLARE

a NUMBER;

b NUMBER;

BEGIN
7


SELECT e,f INTO a,b FROM T1 WHERE e>1;

IF b=1 THEN

INSERT INTO T1 VALUES(b,a);

ELSE

INSERT INTO T1 VALUES(b+10,a+10);

END IF;

END;

. .

run;

Loop diciptakan dengan sebagai berikut:
LOOP

<loop_body> /* A list of statements. * /

END LOOP;

Setidaknya satu laporan dalam <loop_body> harus pernyataan EXIT dalam bentuk

EXIT WHEN <condition>;

Perulangan istirahat jika <condition> benar. Sebagai contoh, berikut adalah cara untuk
menyisipkan masing-masing pasangan (1, 1) sampai (100, 100) ke T1 contoh di atas dua:

DECLARE

i NUMBER := 1; i

BEGIN
8


LOOP
INSERT INTO T1 VALUES(i,i);

i := i+1;

EXIT WHEN i>100;

END LOOP;

END;
. .

run;

Beberapa pernyataan lainnya loop-membentuk berguna adalah:
EXIT dengan sendirinya adalah istirahat loop tanpa syarat. Gunakan di dalam kondisional jika
Anda suka.
Sebuah loop WHILE dapat dibentuk dengan:
WHILE <condition> LOOP

<loop_body>

END LOOP;

Sebuah sederhana UNTUK loop dapat dibentuk dengan:

FOR <var> IN <start>..<finish> LOOP

<loop_body>

END LOOP; END LOOP;

Di sini, dapat <var> variabel apapun, itu adalah lokal ke loop-bagi dan tidak perlu diumumkan.
Juga <start> and <finish> are constants.
9

E. PROSEDUR
PL / SQL prosedur berperilaku sangat mirip dengan prosedur dalam bahasa pemrograman lain.
Berikut adalah contoh SQL / prosedur PL addtuple1 itu, diberi i integer, menyisipkan tuple (i,
'xxx') ke dalam hubungan contoh berikut:
CREATE TABLE T2 (

a INTEGER, INTEGER suatu,

b CHAR(10) B CHAR (10)

); );



CREATE PROCEDURE addtuple1(i IN NUMBER) SEBAGAI

BEGIN

INSERT INTO T2 VALUES(i, 'xxx');

END addtuple1;

. .

run;

Prosedur diperkenalkan oleh kata kunci CREATE PROSEDUR diikuti oleh nama prosedur dan
parameternya. Sebuah opsi adalah mengikuti CREATE dengan OR REPLACE. Keuntungan
melakukannya adalah yang seharusnya Anda telah membuat definisi, Anda tidak akan mendapatkan
kesalahan. Di sisi lain, harus definisi sebelumnya merupakan prosedur yang berbeda dari nama yang
sama, Anda tidak akan diperingatkan, dan prosedur lama akan hilang.
Ada dapat sejumlah parameter, masing-masing diikuti dengan mode dan ketik. Modus yang
mungkin adalah IN (read-only), OUT (write-only), and INOUT (read and write). Catatan Berbeda
dengan specifier ketik sebuah variabel / deklarasi PL SQL, specifier ketik dalam sebuah deklarasi
10

parameter harus tak terbatas . Sebagai contoh, CHAR (10) dan VARCHAR (20) adalah ilegal; CHAR
atau VARCHAR harus digunakan sebagai gantinya. Panjang sebenarnya parameter tergantung pada
argumen yang sesuai yang berlalu di saat prosedur dipanggil.
Mengikuti argumen adalah kata kunci AS (IS adalah sinonim). Then Kemudian datang
tubuh, yang pada dasarnya adalah sebuah PL / SQL blok. Kami telah mengulang nama prosedur
setelah END, tapi ini adalah opsional. Namun, bagian MENYATAKAN tidak harus dimulai dengan
LAPORKAN kata kunci. Sebaliknya, berikut SEBAGAI kita memiliki:
... AS

<local_var_declarations>

BEGIN

<procedure_body>

END;
. .
run;

Ini dijalankan pada akhir menjalankan pernyataan yang menciptakan prosedur; tidak
menjalankan prosedur. Untuk melaksanakan prosedur ini, gunakan lain PL / SQL, di mana
prosedur dipanggil sebagai pernyataan dieksekusi. Sebagai contoh:
BEGIN addtuple1(99); END;
. .
run;

Prosedur berikut juga menyisipkan tuple ke T2, tetapi mengambil keduanya komponen
sebagai argumen:

CREATE PROCEDURE addtuple2(

x T2.a%TYPE,

y T2.b%TYPE)
AS
11


BEGIN

INSERT INTO T2(a, b)

VALUES(x, y);
END addtuple2;

run;

Sekarang, untuk menambahkan tupel (10, 'abc') to T2:

BEGIN

addtuple2(10, 'abc');

END;
. .

run;

Berikut ini menggambarkan penggunaan parameter OUT:

CREATE TABLE T3 (

a INTEGER,

b INTEGER
);

CREATE PROCEDURE addtuple3(a NUMBER, b OUT NUMBER)

AS

BEGIN

b: = 4;

INSERT INTO T3 VALUES(a, b);
12


END;
. .

run;


DECLARE

v NUMBER;

BEGIN

addtuple3(10, v);

END;
. .

run;

Perhatikan bahwa menempatkan nilai ke parameter dinyatakan sebagai OUT atau IN
menyebabkan argumen input yang sesuai untuk ditulis. Karena itu, argumen masukan atau IN
parameter OUT harus sesuatu dengan lvalue ", seperti variabel" seperti v dalam contoh di atas. A
constant or a literal argument should not be passed in for an OUT / INOUT parameter. Sebuah
konstan atau sebuah argumen literal tidak boleh disahkan pada untuk IN / OUT parameter.
Kita juga dapat menulis fungsi daripada prosedur. Dalam deklarasi fungsi, kita mengikuti
daftar parameter oleh RETURN dan jenis nilai kembali:
CREATE FUNCTION <func_name>(<param_list>) RETURN <return_type> AS ...

Dalam tubuh dari definisi fungsi, "RETURN <expression>;" keluar dari fungsi dan
mengembalikan nilai <expression>.
Untuk mengetahui prosedur apa dan fungsi-fungsi yang telah Anda buat, gunakan query
SQL berikut:
select object_type, object_name
13


from user_objects

where object_type = 'PROCEDURE'

or object_type = 'FUNCTION';


Untuk mengurangi salah satu prosedur yang tersimpan / fungsi:
drop procedure <procedure_name>; drop function <function_name>;


F. MENEMUKAN KESALAHAN
PL / SQL tidak selalu memberitahu Anda tentang kesalahan kompilasi. Sebaliknya, itu
memberikan pesan samar seperti "prosedur dibuat dengan error kompilasi". Jika Anda tidak
melihat apa yang salah segera, coba penerbitan perintah

show errors procedure <procedure_name>;

Atau, Anda dapat mengetik, Sho ERR (kependekan SHOW KESALAHAN) untuk melihat
error kompilasi terbaru. Perhatikan bahwa lokasi kesalahan diberikan sebagai bagian dari pesan
kesalahan tidak selalu akurat!

Referensi:
Pramusinto, Wahyu. Pengenalan PL/SQL : Pengertian PL/SQL. 2009: Tangerang

Marsani, Asfi . 2007. PL/SQL: STMIK CIC

Heryanto, Imam dan Raharjo, Budi .2003. Pemrograman PL/SQL ORACLE . Bandung : Informatika

Anda mungkin juga menyukai