0% menganggap dokumen ini bermanfaat (0 suara)
88 tayangan

Modul 10 - PL-SQL

Modul ini membahas penggunaan package PL/SQL untuk mengelompokkan komponen seperti type, variabel, struktur data, exception, dan subprogram menjadi satu unit tunggal. Package terdiri atas spesifikasi dan body, dimana spesifikasi berisi deklarasi komponen publik sedangkan body berisi implementasi termasuk komponen privat. Contoh penggunaan package untuk mencetak laporan ke file teks juga disajikan.

Diunggah oleh

Dony Wibowo
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
88 tayangan

Modul 10 - PL-SQL

Modul ini membahas penggunaan package PL/SQL untuk mengelompokkan komponen seperti type, variabel, struktur data, exception, dan subprogram menjadi satu unit tunggal. Package terdiri atas spesifikasi dan body, dimana spesifikasi berisi deklarasi komponen publik sedangkan body berisi implementasi termasuk komponen privat. Contoh penggunaan package untuk mencetak laporan ke file teks juga disajikan.

Diunggah oleh

Dony Wibowo
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOC, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 8

MODUL PERKULIAHAN

PEMROGRAMAN
PL/SQL

Package

Fakultas Program Studi Tatap Muka Kode MK Disusun Oleh

10
Ilmu Komputer Teknik Informatika F061700004 Wawan Kurniawan, M.Kom

Abstract Kompetensi
Modul ini berisi penggunaan package Mahasiswa mampu menggunakan
dalam oracle database package pada Oracle
Pendahuluan

Package (ORACLE) adalah kumpulan dari fungsi dan procedure. Tiap package harus terdiri
dari dua obyek, yaitu package body dan package specification.

 Package body :
Package (SQL) adalah sebuah schema object yang mengelompokkan PL/SQL types, items,
dan subprograms, 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 kita; ia
mendeklarasikan types, variables, constants, exceptions, cursors, dan subprograms yang
tersedia untuk digunakan.
Body secara penuh mendefinisikan cursors dan  subprograms, dan juga
mengimplementasikan spec.

Contoh Sebuah PL/SQL Package


Dalam contoh di bawah ini, kita mem-package sebuah record type, sebuah cursor, dan dua
procedure kepegawaian. Perlu diingat bahwa procedure hire_employee menggunakan
database sequence empno_seq dan function SYSDATE untuk menambahkan sebuah
employee number baru dan hire date.

CREATE OR REPLACE PACKAGE emp_actions AS — spec


TYPE EmpRecTyp IS RECORD (emp_id INT, salary REAL);
CURSOR desc_salary RETURN EmpRecTyp;
PROCEDURE hire_employee (
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER);
PROCEDURE fire_employee (emp_id NUMBER);

‘19 Pemrograman PL/SQL


2 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
END emp_actions;
CREATE OR REPLACE PACKAGE BODY emp_actions AS — body
CURSOR desc_salary RETURN EmpRecTyp IS
SELECT empno, sal FROM emp ORDER BY sal DESC;
PROCEDURE hire_employee (
ename VARCHAR2,
job VARCHAR2,
mgr NUMBER,
sal NUMBER,
comm NUMBER,
deptno NUMBER) IS
BEGIN
INSERT INTO emp VALUES (empno_seq.NEXTVAL, ename, job, mgr,
SYSDATE, sal, comm, deptno);
END hire_employee; 6
PROCEDURE fire_employee (emp_id NUMBER) IS
BEGIN
DELETE FROM emp WHERE empno = emp_id;
END fire_employee;
END emp_actions;

Hanya deklarasi di dalam package yang terlihat dan dapat dikses terhadap aplikasi. Detil
implementasi di dalam package body disembunyikan dan tidak dapat diakses. Jadi, kita dapat
mengubah body (implementation) tanpa harus meng-compile ulang program-program yang
memanggilnya.

Pengertian package sebuah sarana untuk mengelompokan atau mengorganisasikan Aw kelas


dan interface yang sama atau sekelompok menjadi satu unit tunggal dalam library.
Secara fisik Package dapat berupa folder yang berisi file file/kelas interface/enum lain yang
iya hamper sama sehingga patut untuk dikelompokan.
Package mempengaruhi mekanisme hak akses ke kelas didalamnya.
Ada tiga langkah dalam membuat package yaitu:
 Mendeklarasikan dan member nama package.

‘19 Pemrograman PL/SQL


3 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
1. Membuat struktur dan nama folder yang sesuai dengan struktur dan nama
package.
2. Mengkompilasikan kelas kelas sesuai dengan nama package masing masing.
Mendeklarasikan dan member] nama package. Dek I aras] package harus
diletakan pada bagian paling awal danstia(LI source code setiap kelas yang
dIbungkus package tersebut. Syarat nama package:
 Diawali huruf kecil
 Menggambarkan kelas kelas yang dibungkusnya.
 Merepresentasikan path dare package tersebut.
 Hanes sama direktorinya.

PL/SQL menyediakan sebuah package untuk membungkus beberapa komponen seperti


PL/SQL type, variable, struktur data, exception dan sub program (prosedur, fungsi) menjadi
satu.
Sebuah package pada PL/SQL terdiri dari dua bagian
 Package spesification
 Package body

Public component: semua yg dideklaresikan pada package spesifikasi adalah public, maka


jika akan membuat variable, konstanta, prosedur, fungsi, dan lainnya sebagai public maka
deklarasikan pada package spasification.

Private component: semua yg ditempatkan pada package body adalah private, dan hanya
dapat diakses didalam package body yg sama.
Dan tidak perlu berlama-lama lagi, dibawah ini adalah sebuah blok PL/SQL package.
Pertama kita harus buat spesifikasi package, disini ada dua prosedur yg dideklarasikan pada
package p_report.

Berikutnya package body yg berisi kedua prosedur yg telah dideklarasikan di spesifikasi


package namun lengkap dengan implementasinya. Contoh dibawah ini sama seperti contoh

‘19 Pemrograman PL/SQL


4 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
saya sebelumnya yaitu memakai package UTL_FILE untuk mencetak laporan ke dalam file
teks.
create or replace package body p_report as
   PROCEDURE all_emp(dir IN VARCHAR2, filename IN VARCHAR2) IS
      file UTL_FILE.FILE_TYPE;
      CURSOR c_allemp IS
      SELECT e.employee_id,
    e.first_name,
    e.last_name,
    e.department_id,
    d.department_name,
    e.salary,
    a.maxsal,
    b.minsal
      FROM employees e, departments d,
    (SELECT department_id, MAX(salary) maxsal
     FROM employees
    GROUP BY department_id) a,
    (SELECT department_id, MIN(salary) minsal
     FROM employees
    GROUP BY department_id) b
      WHERE e.department_id = a.department_id AND
          e.department_id = d.department_id AND
          e.department_id = b.department_id;
   BEGIN
       file:= UTL_FILE.FOPEN (dir, filename, 'w');
       UTL_FILE.PUT_LINE(file, 'REPORT ALL EMPLOYEES: GENERATED ON ' ||SYSDATE);
       UTL_FILE.NEW_LINE (file);
       UTL_FILE.PUT_LINE(file,'EmpId' || '  ' ||'Full Name'|| '   ' ||
                'DeptID' || '  ' ||
                'DeptName' || '  ' || 'Salary' || '  ' ||
                'MAXsalary' || '  ' ||'MINsalary');
       UTL_FILE.NEW_LINE (file);
       for rec_allemp in c_allemp LOOP
        UTL_FILE.PUT_LINE (file, rec_allemp.employee_id || ' -- ' ||
                        rec_allemp.first_name || ' ' ||
            rec_allemp.last_name || ' -- ' ||
            rec_allemp.department_id || ' -- ' ||
            rec_allemp.department_name || ' -- ' ||
            rec_allemp.salary || ' -- ' ||
            rec_allemp.maxsal || ' -- ' ||
            rec_allemp.minsal);
       UTL_FILE.NEW_LINE(file);
       END LOOP;
       UTL_FILE.PUT_LINE(file,'---------- END OF REPORT ----------');
       UTL_FILE.FCLOSE (file);
   EXCEPTION
       WHEN UTL_FILE.INVALID_FILEHANDLE THEN
          RAISE_APPLICATION_ERROR(-20001,'Invalid File.');
       WHEN UTL_FILE.WRITE_ERROR THEN
          RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file');
   END all_emp;
   PROCEDURE sal_emp(dir IN VARCHAR2, filename IN VARCHAR2) IS

‘19 Pemrograman PL/SQL


5 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
     file UTL_FILE.FILE_TYPE;
   CURSOR c_salemp IS
    SELECT e.employee_id,
    e.first_name,
    e.last_name,
    e.department_id,
    d.department_name,
    e.salary,
    b.minsal
    FROM employees e, departments d,
    (SELECT department_id, MIN(salary) minsal
     FROM employees
    GROUP BY department_id) b
    WHERE e.department_id = d.department_id AND
          e.department_id = b.department_id AND
      e.salary = b.minsal;
   BEGIN
       file:= UTL_FILE.FOPEN (dir, filename, 'w');
       UTL_FILE.PUT_LINE(file, 'REPORT ALL EMPLOYEES: GENERATED ON ' ||SYSDATE);
       UTL_FILE.NEW_LINE (file);
       UTL_FILE.PUT_LINE(file,'EmpId' || '  ' ||'Full Name'|| '   ' ||
                'DeptID' || '  ' ||
                'DeptName' || '  ' || 'MINSalary' || '  ' ||
                'Salary');
       UTL_FILE.NEW_LINE (file);
       for rec_salemp in c_salemp LOOP
        UTL_FILE.PUT_LINE (file, rec_salemp.employee_id || ' -- ' ||
                        rec_salemp.first_name || ' ' ||
            rec_salemp.last_name || ' -- ' ||
            rec_salemp.department_id || ' -- ' ||
            rec_salemp.department_name || ' -- ' ||
            rec_salemp.minsal || ' -- ' ||
            rec_salemp.salary);
       UTL_FILE.NEW_LINE(file);
       END LOOP;
       UTL_FILE.PUT_LINE(file,'---------- END OF REPORT ----------');
       UTL_FILE.FCLOSE (file);
   EXCEPTION
       WHEN UTL_FILE.INVALID_FILEHANDLE THEN
          RAISE_APPLICATION_ERROR(-20001,'Invalid File.');
       WHEN UTL_FILE.WRITE_ERROR THEN
          RAISE_APPLICATION_ERROR (-20002, 'Unable to write to file');
   END sal_emp;
END p_report;

Setelah package dan package body dibuat maka langkah selanjutnya adalah melakukan tes
apakah prosedur-prosedur tersebut apakah dapat digunakan. Untuk menjalankan prosedur
didalam package maka gunakan perintah dibawah ini:

‘19 Pemrograman PL/SQL


6 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Ow, ternyata sukses dieksekusi. Berarti file report allemp_report.txt telah berhasil dibuat dan
cek saja pada direktori output yg telah kita tentukan.
Berikutnya eksekusi prosedur kedua dengan cara yg sama seperti cara sebelumnya:

Ternyata sukses juga dieksekusi untuk prosedur yg kedua, dan cek juga pada direktori output
bahwa file report salemp_report.txt juga telah berhasil dibuat.
Oh iya, jangan lupa Login sebagai user HR karena kita menggunakan tabel Employees dan
Departments.

‘19 Pemrograman PL/SQL


7 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id
Daftar Pustaka
[1] Arup Nanda, 2017, “Read World SQL And PL/SQL”, McGraw-Hill Education (Publisher).
[2] Oracle Database Documentation: 11G PL/SQL Fundamentals. 2009
[3] Imam Heryanto, 2009, “Menguasai Oracle SQL dn PL/SQL”, Penerbit INFORMATIKA
[4] Adi Nugroho, 2008, “Menjadi Administrator Basis Data Oracle 10g”, Penerbit
INFORMATIKA
[5] Raghu Ramakrishnan and Johannes Gehrke. 2003. “Database Management Systems
Third Edition”. McGraw-Hill
[6] Henry F. Korth, Abraham Silberschatz. 2011. “Database system concepts 6th Edition”.
McGraw-Hill

‘19 Pemrograman PL/SQL


8 Wawan Kurniawan
Pusat Bahan Ajar dan eLearning
http://www.mercubuana.ac.id

Anda mungkin juga menyukai