0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
267 tayangan
PL-SQL Modul
Dokumen tersebut membahas tentang PL/SQL (Procedural Language/Structured Query Language) yang merupakan bahasa pemrograman yang digabungkan dengan SQL untuk memanipulasi data di database Oracle. Dibahas pula struktur, variabel, tipe data, kontrol aliran, dan prosedur pada PL/SQL.
0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
267 tayangan
PL-SQL Modul
Dokumen tersebut membahas tentang PL/SQL (Procedural Language/Structured Query Language) yang merupakan bahasa pemrograman yang digabungkan dengan SQL untuk memanipulasi data di database Oracle. Dibahas pula struktur, variabel, tipe data, kontrol aliran, dan prosedur pada PL/SQL.
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!