Tuesday, November 21, 2017

Memperkenalkan PL / SQL Package


Paket PL / SQL adalah sekelompok fungsi, prosedur, tipe, kursor, dll yang terkait. Paket PL / SQL seperti sebuah perpustakaan yang pernah ditulis tersimpan dalam database Oracle dan dapat digunakan oleh banyak aplikasi.

Paket PL / SQL memiliki dua bagian: spesifikasi paket dan body kemasan.

    Spesifikasi paket adalah antarmuka umum aplikasimu. Masyarakat berarti fungsi, prosedur, jenis, dll yang tersimpan dapat diakses dari aplikasi lain.
    Sebuah paket berisi kode yang mengimplementasikan spesifikasi paket.



Membuat Spesifikasi Paket PL / SQL


Spesifikasi paket diperlukan saat  kamu membuat paket baru. Spesifikasi paket mencantumkan semua objek yang dapat diakses publik dari aplikasi lain. Spesifikasi paket juga menyediakan informasi yang perlu diketahui pengembang agar bisa menggunakan antarmuka. Singkatnya, spesifikasi paket adalah paket API.

Jika spesifikasi paket tidak berisi fungsi tersimpan, prosedur dan tidak diperlukan kode pribadi, kamu tidak perlu memiliki badan paket. Paket ini hanya berisi deklarasi tipe definisi dan variabel. Variabel tersebut dikenal sebagai data paket. Lingkup data paket bersifat global terhadap aplikasi.

Disarankan agar kamu menyembunyikan data paket sebanyak mungkin dan gunakan dan atur fungsi untuk membaca dan menulis data itu. Dengan melakukan ini, kamu dapat mencegah agar data paketmu tidak diubah secara tidak sengaja.

Penting untuk dicatat bahwa kamu harus mengkompilasi spesifikasi paket sebelum badan paket.

Berikut adalah sintaks untuk membuat spesifikasi paket PL / SQL:

CREATE [OR REPLACE] PACKAGE package_name
[ AUTHID { CURRENT_USER | DEFINER } ]
{ IS | AS }

   [definitions of public TYPES
   ,declarations of public variables, types, and objects
   ,declarations of exceptions
   ,pragmas
   ,declarations of cursors, procedures, and functions
   ,headers of procedures and functions]
END [package_name];
Pernyataan CREATE PACKAGE digunakan untuk menentukan spesifikasi paket baru. Jika kamu ingin membangun kembali paket yang ada, kamu dapat menggunakan REPLACE keyword dan bukan kata kunci CREATE keyword. Dalam spesifikasi paket, kamu dapat menentukan jenis baru, menyatakan variabel global, jenis, objek, pengecualian, kursor, prosedur, dan fungsi.

Berikut adalah contoh pembuatan spesifikasi paket baru yang disebut personel. Personnel package berisi dua fungsi: get_fullname () dan get_salary () berdasarkan ID karyawan.

CREATE OR REPLACE PACKAGE personnel AS
  -- get employee's fullname
  FUNCTION get_fullname(n_emp_id NUMBER)
    RETURN VARCHAR2;
  -- get employee's salary
  FUNCTION get_salary(n_emp_id NUMBER)
    RETURN NUMBER;
END personnel;

Membuat PL / SQL Package Body


PL / SQL package body berisi semua kode yang mengimplementasikan fungsi, prosedur, dan kursor yang tersimpan dalam spesifikasi paket.

Berikut ini menggambarkan sintaks pembuatan body pack:

CREATE [OR REPLACE] PACKAGE BODY package_name
   { IS | AS }

   [definitions of private TYPEs
   ,declarations of private variables, types, and objects
   ,full definitions of cursors
   ,full definitions of procedures and functions]
[BEGIN
   sequence_of_statements

[EXCEPTION
   exception_handlers ] ]

END [package_name];
Sintaksnya mirip dengan spesifikasi paket kecuali untuk kata kunci BODY dan kode spesifikasi paket yang diimplementasikan.

Badan paket dapat berisi bagian inisialisasi paket opsional yang muncul di bagian akhir body kemasan. Bagian inisialisasi paket dimulai dengan kata kunci BEGIN key dan diakhiri dengan EXCEPTION section atau END keyword dari paket. Bagian inisialisasi paket dijalankan saat aplikasi merujuk ke elemen paket pada saat pertama.

Berikut ini mengilustrasikan badan paket personnel package:

/*
  Package personnel body
*/
CREATE OR REPLACE PACKAGE BODY personnel AS
  -- get employee's fullname
  FUNCTION get_fullname(n_emp_id NUMBER) RETURN VARCHAR2 IS
      v_fullname VARCHAR2(46);
  BEGIN
    SELECT first_name || ',' ||  last_name
    INTO v_fullname
    FROM employees
    WHERE employee_id = n_emp_id;

    RETURN v_fullname;

  EXCEPTION
  WHEN NO_DATA_FOUND THEN
    RETURN NULL;
  WHEN TOO_MANY_ROWS THEN
    RETURN NULL;
  END; -- end get_fullname

  -- get salary
  FUNCTION get_salary(n_emp_id NUMBER) RETURN NUMBER IS
    n_salary NUMBER(8,2);
  BEGIN
    SELECT salary
    INTO n_salary
    FROM employees
    WHERE employee_id = n_emp_id;

    RETURN n_salary;

    EXCEPTION
      WHEN NO_DATA_FOUND THEN
        RETURN NULL;
      WHEN TOO_MANY_ROWS THEN
        RETURN NULL;
  END;
END personnel;

Mengacu pada elemen paket PL / SQL


kamu bisa mengacu pada elemen paket dengan menggunakan notasi titik:


package_name.package_element

Kode berikut menggambarkan bagaimana menggunakan personnelpackage dengan memanggil fungsinya:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_salary NUMBER(8,2);
  v_name   VARCHAR2(46);
  n_emp_id NUMBER := &emp_id;
BEGIN

  v_name   := personnel.get_fullname(n_emp_id);
  n_salary := personnel.get_salary(n_emp_id);

  IF v_name  IS NOT NULL AND
    n_salary IS NOT NULL
  THEN
    dbms_output.put_line('Employee: ' || v_name);
    dbms_output.put_line('Salary:' || n_salary);
  END IF;
END;

Dalam tutorial ini, kamutelah belajar membuat paket PL / SQL lengkap dan bagaimana cara menggunakannya di program lain.



sumber: http://www.plsqltutorial.com

Tuesday, November 7, 2017

Memperkenalkan PL / SQL For Loop


PL / SQL FOR loop adalah sebuah pernyataan iteratif yang memungkinkan kamu untuk mengeksekusi serangkaian pernyataan beberapa kali. Berbeda dengan loop PL / SQL WHILE, jumlah iterasi loop PL / SQL FOR diketahui sebelum loop dimulai.

Berikut ini menggambarkan sintaks pernyataan PL / SQL FOR loop:

FOR loop_counter IN [REVERSE] lower_bound .. higher_bound
LOOP
   sequence_of_statements;
END LOOP;

Mari kita periksa PL / SQL FOR loop syntax secara lebih rinci:

  •     PL / SQL secara otomatis membuat variabel lokal loop_counter dengan tipe data INTEGER secara implisit dalam loop FOR sehingga kamu tidak perlu mendeklarasikannya. Lingkup variabel loop_counter berada dalam lingkaran itu sendiri sehingga kamu tidak bisa mereferensikannya di luar lingkaran. Setelah setiap iterasi, PL / SQL meningkatkan loop_counter sebesar 1 dan memeriksa apakah loop_counter masih dalam kisaran lower_bound dan higher_bound untuk mengeksekusi iterasi berikutnya. Jika loop_counter tidak berada dalam kisaran, loop akan dihentikan.

  •     Lower_bound..higher_bound adalah kisaran bilangan bulat yang FOR loop iterates over. Rentang ini dikenal dengan skema iterasi. Operator jangkauan ditentukan oleh titik ganda (..) antara lower_bound dan higher_bound.

  •     FOR loop mengevaluasi rentang saat loop pertama kali masuk dan tidak pernah dievaluasi ulang. Lower_bound harus kurang dari atau sama dengan higher_bound. Jika lower_bound sama dengan higher_bound, urutan pernyataan dieksekusi sekali. Jika lower_bound lebih besar dari higher_bound, urutan dalam loop tidak akan pernah dijalankan. The lower_bound dan higher_bound dapat berupa literal, variabel, atau ekspresi yang mengevaluasi ke angka. Jika tidak, PL / SQL akan meningkatkan pengecualian VALUE_ERROR.

  •     Secara default, loop iterates dalam mode ke atas dari lower_bound ke higher_bound. Namun, jika kamu ingin memaksa loop untuk iterate dengan cara turun dari higher_bound ke lower_bound, kamu dapat menggunakan kata kunci REVERSE setelah kata kunci IN.

  •     Kamu harus memiliki setidaknya satu pernyataan yang dapat dieksekusi antara LOOP dan END LOOP kata kunci.

Contoh PL / SQL untuk LOOP


Pada contoh pertama, kita mencetak bilangan bulat dari 1 sampai 10 dengan menggunakan loop PL / SQL FOR sebagai kode di bawah ini:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_times NUMBER := 10;
BEGIN
  FOR n_i IN 1..n_times LOOP
    DBMS_OUTPUT.PUT_LINE(n_i);
  END LOOP;
END;
/


PL / SQL untuk iterasi loop - up

Pada contoh kedua, kami menggunakan kata kunci RESERVE untuk mencetak daftar bilangan bulat dalam urutan menurun.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_times NUMBER := 10;
BEGIN
  FOR n_i IN REVERSE 1..n_times LOOP
    DBMS_OUTPUT.PUT_LINE(n_i);
  END LOOP;
END;
/

PL/SQL FOR Loop – downward iteration



PL / SQL UNTUK iterasi loop - down

Dalam tutorial ini, kita telah belajar bagaimana menggunakan pernyataan PL / SQL FOR loop untuk mengeksekusi sebuah pernyataan dalam jumlah tertentu.



sumber artikel asli dan gambar :http://www.plsqltutorial.com

Pengantar PL / SQL WHILE Loop


Terkadang, kamu tidak tahu terlebih dahulu berapa kali urutan pernyataan perlu dijalankan karena tergantung pada kondisi yang tidak tetap pada waktu kompilasi. Dalam kasus seperti itu, kamu harus menggunakan pernyataan PL / SQL WHILE LOOP.

Berikut ini menggambarkan sintaks PL / SQL WHILE LOOP:

WHILE condition
LOOP
   sequence_of_statements;
END LOOP;

Suatu kondisi adalah variabel Boolean atau ekspresi yang mengevaluasi nilai Boolean TRUE, FALSE atau NULL. Kondisi ini diperiksa pada awal setiap iterasi.

  •     Jika kondisi dievaluasi TRUE, sequence_of_statements dijalankan.
  •     Jika kondisi tersebut dievaluasi ke FALSE atau NULL, loop berakhir dan kontrol dilewatkan ke pernyataan eksekusi berikutnya setelah kata kunci END LOOP.

Penting untuk dicatat bahwa urutan pernyataan tidak dapat dijalankan sama sekali jika kondisi tersebut dievaluasi ke FALSE atau NULL sebelum memasuki loop.

Sebagai tambahan, di dalam loop kamu harus memperbarui beberapa variabel agar kondisinya menjadi FALSE atau NULL pada beberapa titik untuk mengakhiri loop, jika tidak, kamu akan memiliki loop tak berujung, yang menyebabkan kesalahan stack overflow.

Lingkaran PL / SQL WHILE efektif bila kamu tidak tahu berapa kali loop akan dijalankan. Jika jumlah iterasi telah ditentukan sebelumnya, kamu harus menggunakan pernyataan loop PL / SQL FOR.

Diagram alir berikut menggambarkan pernyataan loop PL / SQL WHILE:
PL / SQL WHILE loop


Contoh PL / SQL WHILE LOOP


Contoh ini menghitung faktorial 10 dengan menggunakan pernyataan PL / SQL WHILE LOOP:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_counter   NUMBER := 10;
  n_factorial NUMBER := 1;
  n_temp      NUMBER;
BEGIN
  n_temp := n_counter;
  WHILE n_counter > 0
  LOOP
    n_factorial := n_factorial * n_counter;
    n_counter   := n_counter - 1;
  END LOOP;

  DBMS_OUTPUT.PUT_LINE('factorial of ' || n_temp ||
                       ' is ' || n_factorial);

END;
/

Bagaimana cara kerjanya:


  1.     Pertama, kita menginisialisasi counter ke 10 dan faktorial ke 1.
  2.     Kedua, pada setiap iterasi, kita mengalikan faktorial dengan counter dan menurunkan konter dengan 1. Loop diakhiri saat counter mencapai nol.
  3.     Ketiga, kami menampilkan hasil faktorial 10.

Dalam tutorial ini, kamu telah belajar bagaimana menggunakan pernyataan PL / SQL WHILE LOOP untuk menjalankan serangkaian pernyataan berulang-ulang berdasarkan kondisi yang dicentang sebelum setiap iterasi loop.


sumber gambar dan artikel asli : http://www.plsqltutorial.com

Popular Posts