Sebuah subprogram adalah unit atau modul program yang melakukan tugas tertentu. Subprogram-subprogram ini digabungkan untuk membentuk program yang lebih besar. Hal ini biasanya disebut sebagai ‘Desain Modular’. Sebuah subprogram dapat dipanggil oleh subprogram atau program lain yang disebut program pemanggil.
Sebuah subprogram dapat dibuat dengan menggunakan
- level skema
- Di dalam sebuah paket
- Di dalam sebuah blok PL/SQL
Pada level skema, subprogram adalah subprogram mandiri. Subprogram ini dibuat dengan pernyataan CREATE PROCEDURE atau CREATE FUNCTION. Subprogram disimpan di dalam database dan dapat dihapus dengan pernyataan DROP PROCEDURE atau DROP FUNCTION.
Sebuah subprogram yang dibuat di dalam sebuah paket adalah subprogram berpaket. Subprogram ini disimpan di dalam database dan hanya dapat dihapus ketika paket dihapus dengan pernyataan DROP PACKAGE. Kami akan membahas paket dalam bab ‘PL/SQL – Packages’.
Subprogram-subprogram PL/SQL adalah blok PL/SQL yang diberi nama yang dapat dipanggil dengan sekumpulan parameter. PL/SQL menyediakan dua jenis subprogram
- Fungsi (Functions) − Subprogram ini mengembalikan satu nilai; biasanya digunakan untuk menghitung dan mengembalikan nilai.
- Prosedur (Procedures) − Subprogram ini tidak mengembalikan nilai secara langsung; biasanya digunakan untuk melakukan suatu tindakan.
Bagian-bagian dari sebuah Subprogram PL/SQL
Setiap subprogram PL/SQL memiliki nama, dan juga dapat memiliki daftar parameter. Seperti blok PL/SQL anonim, blok yang diberi nama juga memiliki tiga bagian berikut:
- Declaration section: Bagian ini digunakan untuk mendeklarasikan variabel-variabel dan objek-objek yang akan digunakan dalam subprogram. Ini mencakup deklarasi variabel lokal, tipe data, konstanta, dan deklarasi objek lainnya yang diperlukan untuk eksekusi subprogram.
- Execution section: Bagian ini berisi kode yang akan dieksekusi ketika subprogram dipanggil. Ini adalah tempat dimana logika bisnis subprogram dituliskan, termasuk pernyataan SQL, kontrol aliran (seperti perulangan dan kondisional), manipulasi data, dan pemanggilan subprogram lain jika diperlukan.
- Exception handling section: Bagian ini digunakan untuk menangani pengecualian atau kesalahan yang mungkin terjadi selama eksekusi subprogram. Ini berisi blok penanganan pengecualian yang mendefinisikan tindakan yang harus diambil ketika pengecualian terjadi, seperti menampilkan pesan kesalahan atau melakukan pemulihan.
Membuat Prosedur
Sebuah prosedur dibuat dengan pernyataan CREATE OR REPLACE PROCEDURE. Berikut adalah sintaks sederhana untuk pernyataan CREATE OR REPLACE PROCEDURE:
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT | IN OUT] type [, ...])] {IS | AS} BEGIN < procedure_body > END procedure_name;
procedure-name
menentukan nama dari prosedur.- [OR REPLACE] adalah opsi yang memungkinkan modifikasi dari prosedur yang sudah ada.
- Daftar parameter yang bersifat opsional berisi nama, mode, dan tipe parameter. IN mewakili nilai yang akan dikirimkan dari luar, sedangkan OUT mewakili parameter yang akan digunakan untuk mengembalikan nilai dari prosedur.
procedure-body
berisi bagian yang dapat dieksekusi.- Kata kunci AS digunakan sebagai pengganti kata kunci IS untuk membuat prosedur mandiri.
Contoh
CREATE OR REPLACE PROCEDURE greetings AS BEGIN dbms_output.put_line('Hello World!'); END; /
Ketika Program diatas di Execute:
Procedure created.
Execute Sebuah Prosedur Mandiri
Sebuah prosedur mandiri dapat dipanggil dalam dua cara −
- Menggunakan kata kunci EXECUTE
- Memanggil nama prosedur dari blok PL/SQL
Prosedur di atas yang bernama ‘greetings’ dapat dipanggil dengan menggunakan kata kunci EXECUTE sebagai berikut:
EXECUTE greetings;
Panggilan di atas akan menampilkan
Hello World PL/SQL procedure successfully completed.
Prosedur juga dapat dipanggil dari blok PL/SQL lainnya.
BEGIN greetings; END; /
Panggilan di atas akan menampilkan
Hello World PL/SQL procedure successfully completed.
Menghapus Sebuah Prosedur Mandiri
Sebuah prosedur mandiri dapat dihapus dengan pernyataan DROP PROCEDURE. Berikut adalah sintaks untuk menghapus sebuah prosedur
DROP PROCEDURE procedure_name;
Anda dapat menghapus prosedur ‘greetings’ dengan menggunakan pernyataan berikut:
DROP PROCEDURE greetings;
Mode Parameter dalam Subprogram PL/SQL
Dalam subprogram PL/SQL, parameter dapat memiliki tiga mode: IN, OUT, dan IN OUT. Mode parameter ini mempengaruhi cara parameter digunakan dalam subprogram. Berikut adalah penjelasan untuk masing-masing mode:
- IN: Parameter dengan mode IN digunakan untuk memberikan nilai masukan ke dalam subprogram. Nilai parameter IN hanya dapat dibaca di dalam subprogram dan tidak dapat diubah. Ini berarti parameter IN digunakan untuk membaca nilai yang diberikan dari luar subprogram.
Contoh
CREATE OR REPLACE PROCEDURE my_procedure (param1 IN NUMBER) IS BEGIN -- Menggunakan nilai parameter param1 untuk komputasi di dalam subprogram ... END;
- OUT: Parameter dengan mode OUT digunakan untuk mengembalikan nilai dari subprogram. Parameter OUT dapat diisi dengan nilai di dalam subprogram dan nilai tersebut akan dikembalikan ke pemanggil subprogram saat subprogram selesai dieksekusi. Nilai parameter OUT tidak perlu diinisialisasi sebelum digunakan.
Contoh:
CREATE OR REPLACE PROCEDURE my_procedure (param1 OUT NUMBER) IS BEGIN -- Mengisi nilai parameter param1 di dalam subprogram param1 := 42; END;
- IN OUT: Parameter dengan mode IN OUT digunakan untuk memberikan nilai masukan ke dalam subprogram dan mengembalikan nilai dari subprogram. Parameter IN OUT dapat dibaca dan diubah di dalam subprogram. Nilai parameter IN OUT diinisialisasi sebelum digunakan dan dapat diakses oleh pemanggil subprogram setelah subprogram selesai dieksekusi.
Contoh:
CREATE OR REPLACE PROCEDURE my_procedure (param1 IN OUT NUMBER) IS BEGIN -- Menggunakan nilai parameter param1 untuk komputasi di dalam subprogram param1 := param1 + 1; -- Mengubah nilai parameter param1 END;
Metode untuk Memindahkan Parameter
Parameter aktual dapat diteruskan dalam tiga cara:
- Notasi posisional: Dalam notasi posisional, argumen-argumen yang diteruskan ke subprogram disusun sesuai dengan urutan parameter dalam definisi subprogram.
- Notasi bernama: Dalam notasi bernama, argumen-argumen yang diteruskan ke subprogram diberikan dengan menyebutkan nama parameter yang sesuai.
- Notasi campuran: Dalam notasi campuran, kita dapat menggunakan kombinasi notasi posisional dan bernama. Parameter-posisi yang tidak diberi nama akan diisi berdasarkan urutan posisinya, sementara parameter yang diberi nama akan diberikan nilai secara eksplisit
Notasi Posisional
findMin(a, b, c, d);
Dalam notasi posisional, parameter aktual pertama akan digantikan oleh parameter formal pertama, parameter aktual kedua akan digantikan oleh parameter formal kedua, dan seterusnya. Jadi, nilai a akan digantikan oleh x, nilai b akan digantikan oleh y, nilai c akan digantikan oleh z, dan nilai d akan digantikan oleh m.
Notasi Bernama
Dalam notasi bernama, parameter aktual dihubungkan dengan parameter formal menggunakan simbol panah ( => ). Pemanggilan prosedur akan terlihat seperti berikut
findMin(x => a, y => b, z => c, m => d);
Notasi Campuran
Dalam notasi campuran, Anda dapat mencampur kedua notasi dalam pemanggilan prosedur; namun, notasi posisional harus mendahului notasi bernama.
Pemanggilan berikut ini sah
findMin(a, b, c, m => d);
Pemanggilan berikut ini tidak sah
findMin(x => a, b, c, d);
Sumber https://www.tutorialspoint.com/plsql/plsql_procedures.htm