Bagi anak IT pasti pernah melakukan Query saat membuat database. Baik itu menggunakan MySql, Postgresql, dll. Tapi kali ini kita tidak akan membahas tentang membuat database mysql atau postgresql. Kali ini kita akan mempelajari pemrograman PL/SQL. Apa itu PL/SQL?
Pengenalan PL/SQL. 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. (wikipedia)
Nah untuk pengenalan seperti dalam pembuatan web, PL/SQL juga memiliki Header, Body, dan Footer. Hanya saja penulisan dan tata caranya yang berbeda, misalnya seperti Header menjadi DECLARE, Body menjadi BEGIN, dan Footer menjadi END. Masih bingung? Mari saya jelaskan dalam penulisan source codenya.
DECLARE ----------------------------> (header)
x VARCHAR2(50; ------------------>(inisialisasi variable)
BEGIN -------------------------------->(body)
x := 'Belajar PL/SQL'; --------------------->(sql statement)
DBMS_OUTPUT.PUT_LINE (x); ------->(sql statement (sama seperti print pada java))
END; ------------------------------------------->(footer)
/
Dan untuk melakukan panggilan kita gunakan perintah SET SERVEROUTPUT ON
Nah itu sedikit pengenalan tentang PL/SQL, sangat mudah bukan?
Sekarang saya akan kembali ke topik utama. Apasih Stored Procedure itu?
Stored Procedure merupakan sekumpulan blok PL/SQL yang tersimpan di dalam skema database dan dapat dieksekusi secara berulang kali jika user memiliki privilege untuk mengeksekusi procedure tersebut. Nama procedure yang dibuat nantinya akan menjadi objek dengan tipe procedure. Procedure akan dieksekusi pada saat pemanggilan setelah sebelumnya dibuat terlebih dahulu.
Sebenarnya penggunaan prosedur pada PL/SQL tidak jauh beda dengan yang kita bahas diatas. Hanya untuk bagian DECLARE (header) diubah menjadi CREATE (OR REPLACE) Berikut saya akan berikan contoh penggunakan Stored Procedure;
CREATE [OR REPLACE] PROCEDURE nama_prosedur (fungsi OR REPLACE untuk mengganti prosedur yang sudah ada)
IS/AS (pilih salah satu)
BEGIN
END;
Contoh
code :
CREATE
OR REPLACE PROCEDURE belajar
IS
BEGIN
DBMS_OUTPUT.PUT_LINE
('belajar PL/SQL);
END;
/
Semua
contoh diatas adalah prosedur yang tidak menggunakan parameter, dimana nilai
yang diproses sudah ditentukan dan berada di dalam prosedur tersebut. Ada juga
prosedur yang sifatnya dinamis dimana nilai bisa kita ubah sesuai dengan
kondisi yang diinginkan. Agar bisa berfungsi seperti itu prosedure tersebut
harus menggunakan sebuah parameter sebagai penerima inputan dari user.
Berikut
adalah code prosedur menggunakan parameter;
CREATE
OR REPLACE PROCEDURE nama_prosedur (nama_parameter IN/OUT/INOUT typedata)
IS/AS
BEGIN
END
nama_prosedure;
/
Contoh:
CREATE
OR REPLACE PROCEDURE tambah(pnim IN VARCHAR2, pnama IN VARCHAR2)
IS
BEGIN
INSERT
INTO mahasiswa(nim,nama) values (pnim,pnama);
END
tambah;
Dan
untuk eksekusinya
SET
SERVEROUTPUT ON
EXEC
tambah ('1535010084','KOKO');
Sudah
paham bukan? Nah kali ini saya ada soal (sebenernya tugas sih hehehe) yang
sedikit lebih komplek.
SOAL.
1.
Buat fungsi/prosedur yang bisa menampilkan pesan bahwa bilangan yang
di-inputkan adalah bilangan yang di-inputkan adalah bilangan genap atau ganjil!
2.
Buat fungsi/prosedur untuk menghitung jumlah panjang karakter nama yang
di-inputkan! Handle kesalahan jika yang dimasukkan bukan merupakan karakter.
JAWABAN.
1.
Untuk No.1 sendiri, ada 2 cara meskipun tidak terlalu berbeda tapi tetap saya
tuliskan.
CREATE
OR REPLACE PROCEDURE bilangan
IS
angka
INTEGER :=&angka;
BEGIN
IF
MOD(angka,2) =0 THEN
DBMS_OUTPUT.PUT_LINE(angka
|| ' adalah bilangan genap');
ELSE
DBMS_OUTPUT.PUT_LINE(angka
|| ' adalah bilangan ganjil');
END
IF;
END
;
/
SET
SERVEROUTPUT ON
EXEC
bilangan;
Maka
hasilnya akan seperti gambar berikut :
CREATE OR REPLACE PROCEDURE bilangan (angka int)
IS
BEGIN
IF MOD(angka,2) =0 THEN
DBMS_OUTPUT.PUT_LINE(angka || ' adalah bilangan genap');
ELSE
DBMS_OUTPUT.PUT_LINE(angka || ' adalah bilangan ganjil');
END IF;
END ;
/
SET SERVEROUTPUT ON
EXEC bilangan (15);
Maka hasilnya akan seperti gambar berikut :
2. Mungkin banyak yang bingung apa ya yang bukan karakter itu? Yups, SPASI. Saya sendiri awalnya bingung apasih maksud soal No. 2 hehehe. Okay, kembali ke point berikut adalah jawaban No. 2;
CREATE OR REPLACE FUNCTION karakter(kata IN VARCHAR2)
RETURN VARCHAR2
IS
jumlah INTEGER := LENGTH(kata);
BEGIN
RETURN jumlah ;
END karakter;
/
SELECT karakter (REPLACE('B E L A J A R',' ',null)) as hasil from dual;
Eh, apa ini fungsi REPLACE disini? apakah sama seperti header? Bukan itu adalah fungsi untuk menghapus spasi hehehe.
Berikut cara-cara menghilangkan spasi pada data hasil SELECT yang saya pelajari dari working-log.blogspot.co.id
A. Fungsi LTRIM :
SELECT LTRIM ([nama_kolom]) FROM [nama_tabel];
SELECT LTRIM (employee_name) FROM Master_Employee;
Keterangan : Artinya menghilangkan spasi sebelah kiri dari data employee_name
B. Fungsi RTRIM
SELECT RTRIM ([nama_kolom]) FROM [nama_tabel];
SELECT RTRIM (employee_name) FROM Master_Employee;
Keterangan : Artinya menghilangkan spasi sebelah kanan dari data employee_name
Kita juga bisa menggabungan fungsi LTRIM dan RTRIM
Contoh :
SELECT LTRIM (RTRIM[nama_kolom]) FROM [nama_tabel];
SELECT LTRIM (RTRIM(employee_name)) FROM Master_Employee;
C. Fungsi REPLACE
SELECT REPLACE('[String awal/kolom]','[String yang akan diganti]','String Pengganti')
Contoh :
SELECT REPLACE('A B C','A','D')
Maka Hasilnya 'D B C'
Bentuk contoh lain :
SELECT REPLACE(employee_name,' ',null) FROM Master_Employee
Hasilnya : Data dalam kolom employee_name yang di SELECT tidak ada spasi.
Nah itu tadi sedikit tambahan materi cara menghilangkan spasi. Oh iya belum menunjukan hasil yang nomor 2 ya hehehe, okay berikut adalah hasilnya :
Ini ada juga pas input angka, jadi hasilnya bukan angka yang terteraya tapi panjang karakter hehehe
Nah, pasti semua sudah bisakan? Semua pasti bisa kok asal mau belajar, mencoba, dan mengembangkan hal inipun berlaku juga bagi saya hehehe.
Okay sekian dulu post tentang Stored Procedured PL/SQL, see ya on next post ya hehehe bye
Jangan lupa hit like and subscribe ya :)