Kamis, 19 Desember 2013

Tugas PBD II

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];


Ø  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];
Ø  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;
/

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.
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;
/
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.

Tidak ada komentar:

Posting Komentar