Tugas PBD II
Package adalah sebuah schema object yang
mengelompokkan PL/SQL types, items, dan sub programs yang terkait secara
logikal. Packages biasanya memiliki dua bagian, sebuah specification dan sebuah
body, meskipun kadangkala body tersebut tidak
diperlukan.
Specification
(atau spec) merupakan antarmuka terhadap aplikasi-aplikasi yang mendeklarasikan
types, variables, constants, exceptions, cursors, dan sub programs yang
tersedia untuk digunakan. Body secara penuh mendefinisikan cursors dan
subprograms, dan juga mengimplementasikan spec.
Contoh-contoh
package :
Ø Syntax Package Parent :
CREATE
[OR REPLACE] PACKAGE
package_name IS|AS
public type and variable declarations
subprogram specifications
END [package_name];
public type and variable declarations
subprogram specifications
END [package_name];
Ø Syntax Package Body :
CREATE
[OR REPLACE] PACKAGE BODY
package_name IS|AS
private type and variable declarations
subprogram bodies
[BEGIN initialization statements]
END [package_name];
private type and variable declarations
subprogram bodies
[BEGIN initialization statements]
END [package_name];
Ø Contoh Package Parent:
CREATE
or REPLACE PACKAGE
pkg_emp is
PROCEDURE view_emp_sal(emp_id
employees.employee_id%type, gaji out employees.salary%type);
FUNCTION view_emp_sal1(emp_id
employees.employee_id%type) RETURN NUMBER;
END;
/
END;
/
Keuntungan Menggunakan PACKAGE :
- Modularity
- Memudahkan dalam hal Maintenance
- Memudahkan dalam hal design aplikasi
- Dapat Menyembunyikan Informasi, karena yang hanya ditampilkan dalam sebuah aplikasi hanya parent atau spesifikasinya saja, sedangkan body nya disembunyikan dan tidak dapat diakses.
- Added functionality
- Meningkatkan Performance
- Dapat menggunakan Overloading
Procedure
Procedure
adalah suatu blok PL/SQL yang menyimpan sekumpulan perintah yang tidak disertai
dengan pengembalian nilai. Dengan kata lain, procedure hanya melakukan proses
tertentu saja.
Procedure
Ditandai dengan adanya katakunci CREATE
PROCEDURE di ikuti oleh nama prosedur dan parameternya.Opsi lain ialah
dengan mengikuti CREATE dengan OR REPLACE. Dengan begitu jika telah ada
procedure yang sama sebelumnya maka akan di gantikan dengan procedure yang baru
dan prosedure yang lama akan hilang.
Syntax untuk membuat procedure
CREATE
[OR REPLACE] PROCEDURE nama_procedure
(parameter_1
tipedata, parameter_2 tipedata, …) IS
variabel-variabel_lokal
BEGIN
Statemen;
……
END;
Ada
sejumlah parameter, diantaranya ialah IN (read-only), OUT (write-only) dan
INOUT (read and write)
1. IN
parameter Merupakan Tipe parameter yang
didefinisikan pada aktual parameter untuk kemudian di tangkap oleh formal
parameter. Parameter IN telah di definisikan secara default oleh oracle
CREATE OR REPLACE
PROCEDURE luaslingkaran1 (r IN NUMBER) IS
phi NUMBER:=3.14;
luas NUMBER;
BEGIN
luas := phi*r*r;
DBMS_OUTPUT.PUT_LINE(‘Luas
lingkaran dengan jari-jari ‘||r||’ = ‘||luas);
END;
/
2. OUT
Parameter. Merupakan tipe parameter pada procedure yang nilainya dapat
digunakan oleh si pemanggil procedure dan bisa di bilang OUT parameter merupakan kebalikan dari IN parameter
CREATE OR REPLACE
PROCEDURE luaslingkaran2 (r IN NUMBER, luas OUT NUMBER) IS
phi NUMBER:=3.14;
BEGIN
luas := phi*r*r;
DBMS_OUTPUT.PUT_LINE(‘Luas
lingkaran dengan jari-jari ‘||r||’ = ‘||luas);
END;
/
3. IN
OUT Parameter. Merupakan tipe parameter yang digunakan untuk mengirimkan sebuah
nilai ke procedure yang kemudian akan di proses dan di kembalikan kepada si
pemanggil proced.
FUNCTION
Function merupakan sebuah blok PL/SQL yang dapat mengembalikan sebuah
nilai. Function juga dapat disimpan dalam sebuah schema object, sehingga dapat
digunakan secara berulang-ulang.
Berikut Perbedaan
Procedure dengan Function
Syntax Function :
CREATE [OR REPLACE] FUNCTION function_name
[(parameter1 [mode1] datatype1, …)]
RETURN datatype IS|AS
[local_variable_declarations; …]
BEGIN
– actions;
RETURN expression;
END [function_name];
Contoh :
SET SERVEROUTPUT ON
CREATE OR REPLACE FUNCTION
Lihat_Gaji (ID Employees.employee_id%TYPE)
RETURN NUMBER
IS
Gaji NUMBER;
BEGIN
SELECT Salary INTO Gaji FROM Employees
WHERE employee_id = id;
RETURN Gaji;
END;
Fungsi diatas adalah
fungsi yang digunakan untuk melihat gaji employee berdasarkan employee_id.
Catatan
·
Subprogram dapat di
gunakan untuk menyederhanakan suatu prosedur dan mengurangi duplikasi kode
·
Jika terjadi suatu
kesalahan dalam pembuatan fungsi maka error list dapat dilihat dengan menggunakan
perinta SHOW ERROR
Bentuk Umum :
CREATE OR REPLACE FUNCTION nama_function (parameter_1, …)
RETURN tipe_data AS
variabel_1 tipe_data;
…
BEGIN
statemen_1;
…
RETURN nilai_yang_dikembalikan;
END;
Statemen RETURN tipe_data diatas menunjukkan bahwa function akan mengembalikan nilai dengan tipe data tertentu.
CREATE OR REPLACE FUNCTION nama_function (parameter_1, …)
RETURN tipe_data AS
variabel_1 tipe_data;
…
BEGIN
statemen_1;
…
RETURN nilai_yang_dikembalikan;
END;
Statemen RETURN tipe_data diatas menunjukkan bahwa function akan mengembalikan nilai dengan tipe data tertentu.
Statemen RETURN nilai_yang_dikembalikan berfungsi
untuk mengembalikan nilai yang telah diproses dalam function
Contoh Function
Dengan Parameter :
CREATE OR REPLACE FUNCTION
pangkat (bil INTEGER, n INTEGER)
RETURN INTEGER AS
HASIL INTEGER(10);
I INTEGER;
BEGIN
HASIL := 1;
FOR I IN 1..n LOOP
HASIL := HASIL * bil;
END LOOP;
RETURN HASIL;
END;
/
SET SERVEROUTPUT ON
DECLARE
H INTEGER;
BEGIN
H := pangkat(2, 3);
DBMS_OUTPUT.PUT_LINE(‘Hasil = ‘ || TO_CHAR(H));
END;
/
CREATE OR REPLACE FUNCTION
pangkat (bil INTEGER, n INTEGER)
RETURN INTEGER AS
HASIL INTEGER(10);
I INTEGER;
BEGIN
HASIL := 1;
FOR I IN 1..n LOOP
HASIL := HASIL * bil;
END LOOP;
RETURN HASIL;
END;
/
SET SERVEROUTPUT ON
DECLARE
H INTEGER;
BEGIN
H := pangkat(2, 3);
DBMS_OUTPUT.PUT_LINE(‘Hasil = ‘ || TO_CHAR(H));
END;
/
Pada program ini kita membuat function dengan nama parameter
pangkat. Function yang dibuat ini berfungsi untuk menghasilkan angka yang
ditambah dengan dua. Pada function ini dibutuhkan perulangan for i
1..n loop yang berfungsi untuk mengulang
statement yang telah kita deklarasikan sebelumnya. Kemudian ketikkan sintaks hasil:=
hasil * bil yang berfungsi untuk melakukan perintah pangkat. Setelah
selesai maka akan muncul sintaks function created.
Selanjutnya kita buat program yang baru untuk memanggil function
yang telah dibuat sebelumnya. Disini kita mendeklarasikan pangkat sesuai dengan
yang kita ingnkan. Lalu gunakan perintah dbms_output.put_line (‘hasil =
‘||h); untuk mencetak hasil dari pangkat tersebut.
CURSOR
DECLARE
CURSOR csr_ac IS
SELECT employee_id, salary FROM
employees
WHERE first_name LIKE '%Alana%';
xempno employees.first_name%type;
xsal employees.salary%type;
BEGIN
OPEN csr_ac;
LOOP
FETCH csr_ac INTO xempno, xsal;
EXIT WHEN csr_ac%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(xempno || ' '
||xsal);
END LOOP ;
CLOSE csr_ac;
END;
Penjelasan Perintah Cursor diatas :
-
Cursor bernama
csr_ac yang memilih dari employee_id dan
salary dari tabel employees dimana yang dipilih dari nama Alana.
-
Deklarasi xempno dan
xsal untuk first_name dan salary.
-
Kemudian membuka cursor
csr_ac yang telah dibuat dan kemudian mengambil nilai cursor csr_ac dalam
variable xempno dan xsal dan akan ditutup apabila nilainya kosong.
-
Kemudian ditampilkan
sesuai variable xempno dan xsal, dan selesai perulangannya.
Kemudian ditutup cursor csr_ac
dan selesai.