Wednesday, December 6, 2017

Pernyataan PL / SQL GOTO


PL / SQL GOTO

Pernyataan  PL / SQL GOTO memungkinkan kamu untuk beralih ke pernyataan eksekusi yang spesifik di bagian eksekusi yang sama dari blok PL / SQL.

Sintaks dari pernyataan PL / SQL GOTO adalah sebagai berikut:

GOTO label_name

Dimana label_name adalah label yang mendefinisikan pernyataan target. Dalam sebuah program, kamu bisa menentukan label sebagai berikut:

<<label_name>>
Nama label dilampirkan dalam tanda kurung siku sudut (<< >>).

PL/SQL GOTO restrictions


Ada beberapa batasan dalam menggunakan pernyataan PL / SQL GOTO yang harus kamu sadari sebelum menggunakannya.

Pertama, pernyataan PL / SQL GOTO tidak dapat beralih ke pernyataan IF, pernyataan CASE, pernyataan LOOP, atau child-block.

Satu-satunya cara untuk membuat pernyataan IF adalah melalui pemeriksaan kondisinya. Hal ini juga diterapkan pada pernyataan CASE. Dalam contoh berikut, pernyataan GOTO mencoba melompat ke dalam sebuah pernyataan IF, yang tidak diperbolehkan. Akibatnya, PL / SQL mengeluarkan pesan kesalahan.

BEGIN
    GOTO goto_inside_if;
    IF v_status = 'COMPLETED' THEN
      <<goto_inside_if>>
      ...
    END IF;
END;


Pernyataan GOTO tidak bisa bercabang sampai tengah loop:

BEGIN
  GOTO goto_inside_loop;
  FOR n_day IN 1 .. 7
  LOOP
     <<goto_inside_loop>>
     ...
  END LOOP;
END;
Satu-satunya cara untuk memasuki child block adalah melalui pernyataan BEGIN-nya. Contoh berikut tidak sesuai dengan peraturan ini, sehingga menyebabkan kesalahan.

BEGIN
  GOTO inside_child_block;
  ...
  BEGIN
    ...
    <<inside_child_block>>
    ...
  END;
END;


Kedua, kamu tidak dapat menggunakan pernyataan GOTO untuk cabang dari bagian penanganan pengecualian kembali ke blok saat ini. Contoh berikut tidak sesuai dengan peraturan ini, karena itu menyebabkan kesalahan.

BEGIN
  --...
  <<back_to_exec>>
  --...
  EXCEPTION.
    --...
    WHEN SOMETHING_WRONG_HAPPENED.
        GOTO back_to_exec;
    --...
END;
Ketiga, kamu tidak bisa menggunakan pernyataan GOTO untuk keluar dari subprogram. Untuk mengakhiri subprogram, kamu akan melompat ke akhir subprogram menggunakan pernyataan GOTO atau menggunakan pernyataan RETURN.

Keempat, Anda tidak dapat menggunakan pernyataan GOTO untuk membuat cabang dari satu klausa IF ke yang lain, atau dari satu klausa WHEN dari pernyataan CASE ke yang lain.

Kelima, setidaknya harus ada satu pernyataan yang bisa dieksekusi muncul setelah label target. Jika kamu hanya ingin bercabang ke label target tanpa melakukan apapun, kamu menggunakan pernyataan NULL

Contoh PL / SQL GOTO


Contoh berikut menunjukkan bagaimana menggunakan pernyataan PL / SQL GOTO:

SET SERVEROUTPUT ON SIZE 1000000;
BEGIN
  GOTO label_1;
  DBMS_OUTPUT.PUT_LINE('Right after the GOTO statement');
  <<label_1>>
  DBMS_OUTPUT.PUT_LINE('It is here!');
END;
/
Keluaran dar script-nya adalah:

It is here!
Ketika PL / SQL mencapai pernyataan GOTO, ia melewatkan semuanya dan langsung melompat ke label sasaran yaitu label_1 dan ini menampilkan pesannya It is here.

Pernyataan PL / SQL GOTO memiliki reputasi buruk karena membuat kode sulit dipahami dan sulit untuk di-debug. Secara umum, pernyataan PL / SQL GOTO harus dihindari dan diganti dengan pernyataan lain seperti pernyataan IF atau CASE.

Namun, ada beberapa kasus yang menggunakan pernyataan GOTO bisa membuat program lebih efisien. Lihat contoh berikut ini:

BEGIN
   IF ... THEN
         FOR rec_emp IN cur_emp LOOP
            -- By pass all using GOTO
            GOTO <<exit_now>>
         END LOOP;
         -- a lot of code here
   END IF;
   -- target label
   <<exit_now>>
   NULL;
END;

Pada contoh di atas, alih-alih melewati banyak kode setelah pernyataan loop FOR pertama, kita bisa menggunakan pernyataan GOTO untuk melompat ke ujung blok yang membuat kode sangat efisien.

Dalam tutorial ini, kamu telah belajar bagaimana menggunakan pernyataan PL / SQL GOTO untuk cabang tanpa syarat ke label target di blok yang sama.




Sumber asli :http://www.plsqltutorial.com

Tuesday, December 5, 2017

Memperkenalkan PL / SQL Cursor


Ketika kamu bekerja dengan database Oracle, kamu bekerja dengan satu set baris lengkap yang dikembalikan dari sebuah pernyataan SELECT.

Namun aplikasi dalam beberapa kasus tidak dapat bekerja secara efektif dengan keseluruhan rangkaian hasil, oleh karena itu, server basis data perlu menyediakan mekanisme agar aplikasi dapat bekerja dengan satu baris atau subset dari hasil yang ditetapkan pada satu waktu.

Akibatnya, Oracle membuat kursor PL / SQL untuk menyediakan ekstensi ini.

Cursor PL / SQL adalah pointer yang menunjukkan hasil query SQL terhadap tabel database.

Bekerja dengan Cursor PL / SQL


Gambar berikut menjelaskan langkah-langkah yang perlu Anda ikuti saat Anda bekerja dengan cursor PL / SQL:


PL/SQL Cursor

Mari kita periksa setiap langkah secara lebih rinci.

Mendeklarasikan PL / SQL Cursor


Untuk menggunakan kursor PL / SQL, pertama-tama kamu harus mendeklarasikannya di bagian deklarasi blok PL / SQL atau dalam sebuah paket sebagai berikut:

CURSOR cursor_name [ ( [ parameter_1 [, parameter_2 ...] ) ]
      [ RETURN return_specification ]
IS sql_select_statements
[FOR UPDATE [OF [column_list]];

  •     Pertama, kamu menyatakan nama cursor cursor_name setelah kata kunci cursor. Nama cursor bisa memiliki panjang hingga 30 karakter dan mengikuti aturan penamaan pengenal di PL / SQL. Penting untuk dicatat bahwa nama cursor bukan variabel sehingga Anda tidak dapat menggunakannya sebagai variabel seperti menugaskannya ke cursor lain atau menggunakannya dalam sebuah ekspresi. Parameter1, parameter2 ... adalah elemen opsional dalam deklarasi cursor. Parameter ini memungkinkan Anda untuk melewatkan argumen ke cursor. RETURN return_specification juga merupakan bagian opsional.
  •     Kedua, kamu menentukan pernyataan SQL yang valid yang mengembalikan kumpulan hasil yang akan ditunjukkan cursor.
  •     Ketiga, kamu bisa menunjukkan daftar kolom yang ingin kamu update setelah FOR UPDATE OF. Bagian ini bersifat opsional sehingga kamu bisa menghilangkannya dalam deklarasi CURSOR.

Berikut adalah contoh untuk mendeklarasikan cursor:

CURSOR cur_chief
IS
  SELECT
    first_name, last_name, department_name
  FROM
    employees e
  INNER JOIN departments d ON d.manager_id = e.employee_id;
Kami mengambil data dari tabel karyawan dan departemen menggunakan klausa SELECT with the INNER JOIN dan menetapkan kursor cur_chief ke set hasil ini.

Membuka Cursor PL / SQL


Setelah mendeklarasikan Cursor, kamu bisa membukanya dengan menggunakan sintaks berikut:

OPEN cursor_name [(argument_1 [, argument_2 ...])];

Kamu harus menentukan nama cursor cursor_name setelah kata kunci OPEN. Jika cursor didefinisikan dengan daftar parameter, kamu harus melewati argumen yang sesuai ke cursor.

Ketika kamu melakukan OPEN cursor, PL / SQL mengeksekusi pernyataan SELECT dan mengidentifikasi set hasil aktif. Perhatikan bahwa OPEN action sebenarnya tidak mengambil catatan dari database. Itu terjadi di FETCH step. Jika cursor dinyatakan dengan klausa FOR UPDATE, PL / SQL mengunci semua record pada set hasil.

Kita bisa membuka cur_chief cursor sebagai berikut:

OPEN cur_chief;

Fetching Records dari kursor PL / SQL


Setelah cursor terbuka, kamu dapat mengambil data dari cursor ke dalam record yang memiliki struktur yang sama seperti cursor. Alih-alih mengambil data menjadi catatan, kamu juga dapat mengambil data dari cursor ke daftar variabel.

Tindakan mengambil mengambil data dan mengisi catatan atau daftar variabel. Kamu bisa memanipulasi data ini di memori. Kamu bisa mengambil data sampai tidak ada catatan yang ditemukan di set hasil aktif.

Sintaksis FETCH  sebagai berikut:

 FETCH cursor_name INTO record or variables

Kamu dapat menguji atribut kursor % FOUND atau % NOTFOUND untuk memeriksa apakah pengambilan terhadap cursor berhasil dilakukan. Cursor memiliki lebih banyak atribut yang akan kita bahas di bagian selanjutnya.

Kita bisa menggunakan pernyataan PL / SQL LOOP bersamaan dengan loop FETCHto melalui semua record dalam hasil aktif yang ditetapkan sebagai berikut:

LOOP
    -- fetch information from cursor into record
    FETCH cur_chief INTO r_chief;

    EXIT WHEN cur_chief%NOTFOUND;

    -- print department - chief
    DBMS_OUTPUT.PUT_LINE(r_chief.department_name || ' - ' ||
                         r_chief.first_name || ',' ||
                         r_chief.last_name);
  END LOOP;

Closing PL/SQL Cursor


Kamu harus selalu menutup kursor saat tidak lagi digunakan. Jika tidak, kamu akan memiliki kebocoran memori dalam program , yang tidak diharapkan.

Untuk menutup cursor, kamumenggunakan CLOSE statement sebagai berikut:

CLOSE cursor_name;
Dan inilah contoh penutupan cursor cur_chief:

CLOSE cur_chief;

Contoh Cursor PL / SQL yang lengkap


Berikut ini adalah contoh lengkap dari cursor untuk mencetak daftar kepala dan nama departemen sebagai berikut:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  -- declare a cursor
  CURSOR cur_chief  IS
      SELECT first_name,
                      last_name,
                      department_name
      FROM employees e
      INNER JOIN departments d ON d.manager_id = e.employee_id;

  r_chief cur_chief%ROWTYPE;
BEGIN
  OPEN cur_chief;
  LOOP
    -- fetch information from cursor into record
    FETCH cur_chief INTO r_chief;

    EXIT WHEN cur_chief%NOTFOUND;

    -- print department - chief
    DBMS_OUTPUT.PUT_LINE(r_chief.department_name || ' - ' ||
                         r_chief.first_name || ',' ||
                         r_chief.last_name);
  END LOOP;
  -- close cursor cur_chief
  CLOSE cur_chief;
END;
/


Atribut Cursor PL / SQL


Ini adalah atribut utama dari cursor PL / SQL dan deskripsi mereka.

Atribut:                cursor_name % FOUND             
Deskripsi:            kembali TRUE  jika record berhasil diambil oleh cursor cursor_name

Atribut :               cursor_name% NOTFOUND     
Deskripsi:            kembali TRUE jika record tidak diambil berhasil oleh cursor cursor_name 

Atribut:                cursor_name% ROWCOUNT    
Deskripsi:            mengembalikan jumlah record yang diambil dari kursor cursor_name  saat kita menguji % ROWCOUNT attribute

Atribut:                cursor_name% ISOPEN             
Deskripsi:            mengembalikan TRUE jika  cursor cursor_name  terbuka

Dalam tutorial ini, kamu telah belajar bagaimana menggunakan cursor PL / SQL untuk melewati satu set baris dengan semua langkah penting yang perlu dilakukan termasuk DECLARE, OPEN, FETCH dan CLOSE.





Sumber : http://www.plsqltutorial.com

Apa itu Record PL / SQL?


Record / Catatan PL / SQL adalah struktur data gabungan yang merupakan kumpulan data terkait yang tersimpan dalam kolom. Setiap field dalam data PL / SQL memiliki nama dan tipe data tersendiri.

Mendeklarasikan Record PL / SQL


PL / SQL menyediakan tiga cara untuk mendeklarasikan record: table-based record, cursor-based record and programmer-defined records.

Mendeklarasikan Table-based Record


Untuk mendeklarasikan record berbasis tabel kamu bisa menggunakan nama tabel dengan atribut% ROWTYPE. Bidang data PL / SQL memiliki nama dan tipe data yang sama dengan kolom tabel.

Berikut ini menggambarkan deklarasi rekaman berbasis tabel:

DECLARE
   table_based_record table_name%ROWTYPE;
Setelah memiliki record berbasis tabel, kamu bisa menggunakannya dengan berbagai cara, misalnya dalam SQL SELECT statement sebagai berikut:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  r_emp employees%ROWTYPE;
  n_emp_id  employees.employee_id%TYPE := 200;
BEGIN
  SELECT *
  INTO r_emp
  FROM employees
  WHERE employee_id = n_emp_id;
  -- print out the employee's first name
  DBMS_OUTPUT.PUT_LINE(r_emp.first_name);
END;
/

Dalam contoh di atas:

  •     Pertama, kami mendefinisikan sebuah catatan berdasarkan tabel karyawan di database sampel SDM.
  •     Kedua, kami menggunakan pernyataan SELECT untuk mengambil informasi karyawan dari id karyawan 200 dan mengisi data ke dalam catatan r_emp.
  •     Ketiga, kami mencetak nama depan karyawan terpilih dari catatan karyawan r_emp.

Mendeklarasikan Programmer-defined Record


Untuk mendeklarasikan record yang ditentukan programmer, pertama kamu harus mendefinisikan tipe record dengan menggunakan pernyataan TYPE dengan field record secara eksplisit. Kemudian, kamu dapat mendeklarasikan rekaman berdasarkan jenis rekaman yang telah kamu tetapkan.

Berikut ini mengilustrasikan sintaks dari definisi yang didefinisikan pemrogram dengan pernyataan TYPE:

TYPE type_name IS RECORD
   (field1 data_type1 [NOT NULL] := [DEFAULT VALUE],
    field2 data_type2 [NOT NULL] := [DEFAULT VALUE],
    ...
    fieldn data_type3 [NOT NULL] := [DEFAULT VALUE]
    );
Jenis data bidang dapat berupa salah satu dari berikut ini:

  •     Jenis skalar (VARCHAR2, NUMBER ...).
  •     Deklarasi jangkar   %TYPE.
  •     % ROW  type, dalam hal ini kita memiliki nested record.
  •     SUBTYPE
  •     Jenis koleksi PL / SQL.
  •     Variabel kursor REF CURSOR.

Setelah Anda menentukan jenis rekaman, kamu dapat mendeklarasikan catatan berdasarkan jenis rekaman sebagai berikut:

record_name type_name;

Contoh berikut menunjukkan bagaimana cara mendeklarasikan programmer-defined record:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  TYPE t_name IS RECORD(
     first_name employees.first_name%TYPE,
     last_name  employees.last_name%TYPE
  );
  r_name   t_name; -- name record
  n_emp_id employees.employee_id%TYPE := 200;
BEGIN
  SELECT first_name,
         last_name
  INTO r_name
  FROM employees
  WHERE employee_id = n_emp_id;
  -- print out the employee's name
  DBMS_OUTPUT.PUT_LINE(r_name.first_name || ',' || r_name.last_name );
END;
/


Mendeklarasikan Record berbasis kursor / record based on a cursor

Kamu dapat menentukan catatan berdasarkan kursor. Pertama, kamu harus menentukan kursor. Dan kemudian kamu dapat menggunakan% ROWTYPE dengan variabel kursor untuk menyatakan sebuah catatan. Bidang catatan sesuai dengan kolom dalam pernyataan SELECT kursor.

Berikut ini adalah contoh untuk mendeklarasikan record berdasarkan kursor.

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  CURSOR cur_emp IS
    SELECT *
    FROM employees
    WHERE employee_id = 200;

  emp_rec cur_emp%ROWTYPE;
BEGIN
  NULL;
END;
/

Bekerja dengan PL / SQL Record


Setelah memiliki catatan PL / SQL, kamu dapat bekerja dengan catatan secara keseluruhan atau kamu dapat bekerja dengan bidang catatan individual.

Bekerja dengan catatan PL / SQL pada tingkat rekor


Pada tingkat rekor, kamu dapat melakukan hal berikut:

  •     Anda dapat menetapkan catatan PL / SQL ke catatan PL / SQL lainnya. Sepasang catatan PL / SQL harus memiliki jumlah bidang yang sama dan tipe data dari masing-masing bidang harus dapat dikonversi.
  •     Anda dapat menetapkan nilai NULL PL / SQL dengan menetapkan catatan yang tidak diinisiasi.
  •     Sebuah catatan PL / SQL dapat digunakan sebagai argumen parameter dalam suatu fungsi
  •     Anda bisa mengembalikan catatan PL / SQL dari sebuah fungsi
  •     Untuk memeriksa apakah catatan NULL, Anda harus memeriksa masing-masing bidang catatan.
  •     Untuk membandingkan dua catatan, Anda harus membandingkan masing-masing bidang masing-masing catatan.

Berikut adalah contoh bekerja dengan catatan PL / SQL pada tingkat rekor:

SET serveroutput ON SIZE 1000000;
DECLARE
  TYPE t_name IS RECORD(
    first_name employees.first_name%TYPE,
    last_name employees.last_name%TYPE
  );
  r_name      t_name;
  r_name2     t_name;
  r_name_null t_name;
  n_emp_id employees.employee_id%TYPE := 200;
BEGIN
  -- assign employee's infomation to record
  SELECT first_name,
         last_name
  INTO r_name
  FROM employees
  WHERE employee_id = n_emp_id;

  -- assign record to another record
  r_name2 := r_name;
  -- print out the employee's name
  DBMS_OUTPUT.PUT_LINE(r_name2.first_name || ',' || r_name2.last_name);

  -- assign record to NULL
  r_name2 := r_name_null;

  -- check NULL for each individual field
  IF r_name2.first_name IS NULL AND
     r_name2.last_name IS NULL THEN
    DBMS_OUTPUT.PUT_LINE('Record r_name2 is NULL');
  END IF;

END;
/


Bekerja dengan PL/SQL record at field level


Seperti yang kamu lihat pada contoh di atas, kita dapat merujuk ke bidang catatan dengan menggunakan notasi titik (.) Sebagai berikut:

record_name.field

Jika kamu mengacu pada variabel rekaman dalam paket atau skema yang berbeda, kamu perlu secara eksplisit menentukan informasi tersebut seperti yang ditunjukkan di bawah ini:

[schema_name.] [package_name.] record_name.field

Kamu dapat menggunakan operator penugasan (: =) untuk mengubah nilai bidang catatan yang kamu rujuk.

Untuk catatan bersarang kamu perlu menggunakan notasi titik ekstra (.)

Contoh berikut menunjukkan bagaimana menggunakan data PL / SQL pada field level:

DECLARE
  TYPE t_address IS RECORD(
    house_number VARCHAR2(6),
    street       VARCHAR2(50),
    phone        VARCHAR2(15),
    region       VARCHAR2(10),
    postal_code  VARCHAR2(10),
    country      VARCHAR2(25)
  );

  TYPE t_contact IS RECORD(
    home     t_address,
    business t_address
  );
  r_contact t_contact;
BEGIN
  r_contact.business.house_number := '500';
  r_contact.business.street       := 'Oracle Parkway';
  r_contact.business.region       := 'CA';
  r_contact.business.postal_code  := '94065';
  r_contact.business.country      := 'USA';
  r_contact.business.phone        := '+1.800.223.1711';
END;
Dalam tutorial ini, kamu telah belajar bagaimana menggunakan data PL / SQL untuk memanipulasi data dengan lebih efisien, dan membuat kode kamu lebih bersih dan mudah perawatannya.




Sumber : http://www.plsqltutorial.com

Monday, December 4, 2017

Memperkenalkan PL/SQL Exception


Dalam PL / SQL, segala jenis kesalahan diperlakukan sebagai pengecualian. Pengecualian didefinisikan sebagai kondisi khusus yang mengubah alur eksekusi program. PL / SQL memberi Kamu cara yang fleksibel dan ampuh untuk menangani pengecualian semacam itu.

PL / SQL menangkap dan menangani pengecualian dengan menggunakan exception handler architecture. Kapan pun pengecualian terjadi, hal itu dinaikkan. Penghentian eksekusi blok PL / SQL saat ini, kontrol dilewatkan ke bagian terpisah yang disebut bagian pengecualian.

Di bagian pengecualian, kamu dapat memeriksa pengecualian apa yang telah terjadi dan menanganinya dengan tepat. Arsitektur pengendali pengecualian ini memungkinkan pemisahan logika bisnis dan kode penanganan pengecualian sehingga membuat program lebih mudah dibaca dan dipelihara.


PL/SQL Exception


Ada dua jenis pengecualian:


  •     Pengecualian sistem: pengecualian sistem dinaikkan oleh PL / SQL run-time saat mendeteksi kesalahan. Misalnya, NO_DATA_FOUND exception dinaikkan jika kamu memilih catatan yang tidak ada dari database.

  •     Pengecualian yang ditentukan oleh programmer: pengecualian yang ditentukan oleh programmer ditentukan oleh kamu dalam aplikasi tertentu. Kamu dapat memetakan nama pengecualian dengan kesalahan Oracle tertentu menggunakan EXCEPTION_INIT pragma. Anda juga dapat menetapkan nomor dan deskripsi ke pengecualian menggunakan RAISE_APPLICATION_ERROR.

Mendefinisikan PL/SQL Exception


Pengecualian harus didefinisikan sebelum dapat diajukan. Oracle menyediakan banyak pengecualian standar pada STANDARD package. Untuk menentukan pengecualian, kamu bisa menggunakan EXCEPTION keyword seperti di bawah ini:

EXCEPTION_NAME EXCEPTION;

Untuk meningkatkan pengecualian yang telah kamu definisikan, kamu bisa menggunakan pernyataan RAISE sebagai berikut:

RAISE EXCEPTION_NAME;

Di bagian exception handler, kamu bisa menggunakan exception seperti biasa. Contoh berikut menggambarkan pengecualian yang ditentukan oleh pemrogram. Kami mendapatkan gaji seorang karyawan dan memeriksanya dengan gaji di tempat kerja.

Jika gaji di bawah kisaran, kita naikkan pengecualian BELOW_SALARY_RANGE. Jika gaji di atas kisaran, kami meningkatkan pengecualian ABOVE_SALARY_RANGE hanya membuatnya sederhana untuk demonstrasi.

SET SERVEROUTPUT ON SIZE 100000;
DECLARE
  -- define exceptions
  BELOW_SALARY_RANGE EXCEPTION;
  ABOVE_SALARY_RANGE EXCEPTION;
  -- salary variables
  n_salary employees.salary%TYPE;
  n_min_salary employees.salary%TYPE;
  n_max_salary employees.salary%TYPE;
  -- input employee id
  n_emp_id employees.employee_id%TYPE := &emp_id;
BEGIN
  SELECT salary,
         min_salary,
         max_salary
  INTO n_salary,
       n_min_salary,
       n_max_salary
  FROM employees
  INNER JOIN jobs ON jobs.job_id = employees.job_id
  WHERE employee_id = n_emp_id;

  IF n_salary < n_min_salary THEN
     RAISE BELOW_SALARY_RANGE;
  ELSIF n_salary > n_max_salary THEN
      RAISE ABOVE_SALARY_RANGE;
  END IF;

  dbms_output.put_line('Employee ' || n_emp_id ||
                               ' has salary $' || n_salary );

  EXCEPTION
    WHEN BELOW_SALARY_RANGE THEN
      dbms_output.put_line('Employee ' || n_emp_id ||
              ' has salary below the salary range');
    WHEN ABOVE_SALARY_RANGE THEN
      dbms_output.put_line('Employee ' || n_emp_id ||
              ' has salary above the salary range');
    WHEN NO_DATA_FOUND THEN
      DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found');
END;
/

Dalam tutorial ini, kamu telah belajar bagaimana mendefinisikan pengecualian PL / SQL kamu sendiri, meningkatkan dan menanganinya di bagian pengendali pengecualian dari blok PL / SQL.




Sumber : http://www.plsqltutorial.com/

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

Wednesday, October 25, 2017

Pengantar Pernyataan LOOP PL / SQL


Pernyataan PL / SQL LOOP adalah pernyataan kontrol iteratif yang memungkinkan kamu untuk menjalankan urutan pernyataan berulang kali seperti WHILE dan FOR loop.

Bentuk paling sederhana dari pernyataan LOOP terdiri dari kata kunci LOOP, urutan pernyataan dan kata kunci END LOOP seperti gambar di bawah ini:

LOOP
   sequence_of_statements;
END LOOP;
Perhatikan bahwa setidaknya harus ada satu pernyataan eksekusi antara LOOP dan END LOOP kata kunci. Urutan pernyataan dieksekusi berulang kali sampai mencapai exit loop. PL / SQL memberikan pernyataan EXIT dan EXIT-WHEN untuk memungkinkan kamu menghentikan sebuah loop.

  • EXIT memaksa loop menghentikan eksekusi tanpa syarat dan melewati kontrol ke pernyataan berikutnya setelah pernyataan LOOP. Anda biasanya menggunakan pernyataan EXIT dengan pernyataan IF.

  • Pernyataan EXIT-WHEN memungkinkan loop untuk mengakhiri kondisional. Saat pernyataan EXIT-WHEN tercapai, kondisi klausa WHEN dicentang. Jika kondisi dievaluasi TRUE, loop diakhiri dan kontrol dilewatkan ke pernyataan berikutnya setelah kata kunci END LOOP.Jika kondisi dievaluasi ke FALSE, loop akan berlanjut berulang-ulang sampai kondisi dievaluasi TRUE. Oleh karena itu, jika kamu tidak ingin memiliki lingkaran tak terbatas, kamu harus melakukan sesuatu di dalam lingkaran agar kondisinya menjadi TRUE

Berikut ini menggambarkan pernyataan PL / SQL LOOP dengan EXIT dan EXIT-WHEN statements:
LOOP
   ...
   EXIT;
END LOOP;

LOOP
   ...
   EXIT WHEN condition;
END LOOP;

Contoh pernyataan PL / SQL LOOP

Contoh PL / SQL LOOP dengan EXIT Statement


Dalam contoh ini, kita mendeklarasikan sebuah counter. Di dalam lingkaran, kita menambahkan 1 ke meja dan menampilkannya. Jika nilai konter sama dengan 5, kita menggunakan statemen EXIT untuk mengakhiri loop.

Berikut ini adalah contoh penggunaan pernyataan PL / SQL LOOP dengan EXIT:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE n_counter NUMBER := 0;
BEGIN
  LOOP
    n_counter := n_counter + 1;
    DBMS_OUTPUT.PUT_LINE(n_counter);
    IF n_counter = 5 THEN
      EXIT;
    END IF;
  END LOOP;
END;
/

 

Contoh PL / SQL LOOP dengan EXIT-WHEN Statement


Kita akan menggunakan contoh counter yang sama di atas. Namun, alih-alih menggunakan pernyataan IF-THEN dan EXIT, kita menggunakan EXIT-WHEN untuk mengakhiri loop. Contoh kode terdaftar sebagai berikut:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE n_counter NUMBER := 0;
BEGIN
  LOOP
    n_counter := n_counter + 1;
    DBMS_OUTPUT.PUT_LINE(n_counter);
    EXIT WHEN n_counter = 5;
  END LOOP;
END;
/
Seperti yang kamu lihat dalam dua contoh di atas, EXIT dan EXIT-WHEN dapat digunakan secara bergantian. Pernyataan EXIT berjalan bersamaan dengan pernyataan IF-THEN setara dengan pernyataan EXIT-WHEN.

Label Loop


Sebuah loop dapat memiliki label opsional yang merupakan pengenal yang tidak dideklarasikan yang dilampirkan dengan tanda kurung siku sudut << label >>. Label loop muncul di awal dan juga di akhir pernyataan PL / SQL LOOP. Label loop digunakan untuk memenuhi syarat nama variabel counter loop saat sebuah lingkaran disarangkan di dalam lingkaran lain.

Berikut ini menggambarkan sintaks pernyataan loop PL / SQL dengan label:

<<label>>
LOOP
   sequence_of_statements;
END LOOP label;
Contoh berikut menggunakan label loop dengan nested loop:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_i NUMBER := 0;
  n_j NUMBER := 0;
BEGIN
  << outer_loop >>
  LOOP
    n_i := n_i + 1;
    EXIT WHEN n_i = 2;
    << inner_loop >>
    LOOP
      n_j := n_j + 1;
      EXIT WHEN n_j = 5;
      DBMS_OUTPUT.PUT_LINE('Outer loop counter ' || n_i);
      DBMS_OUTPUT.PUT_LINE('Inner loop counter ' || n_j);
    END LOOP inner_loop;
  END LOOP outer_loop;
END;
/

PL / SQL LOOP Pernyataan


Dalam tutorial ini, kamu telah belajar bagaimana menggunakan PL / SQL LOOP bersamaan dengan EXIT dan EXIT-WHEN statements untuk membuat pernyataan iteratif di PL / SQL untuk menjalankan serangkaian pernyataan berulang kali.



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

Tuesday, October 24, 2017

Pengantar  CASE Statement  PL / SQL


Pernyataan CASE  PL / SQL memungkinkan kamu untuk melakukan serangkaian pernyataan berdasarkan pemilih. Seorang pemilih dapat berupa sesuatu seperti variabel, fungsi, atau ekspresi yang ditunjukkan oleh pernyataan CASE terhadap nilai Boolean.

kamu dapat menggunakan hampir semua jenis data PL / SQL sebagai pemilih kecuali tipe BLOB, BFILE dan komposit.

Berbeda dengan pernyataan PL / SQL IF, pernyataan CASE PL / SQL menggunakan pemilih daripada menggunakan kombinasi beberapa ekspresi Boolean.

Berikut ini menggambarkan sintaks pernyataan PL / SQL CASE:

[<<label_name>>]
CASE [TRUE | selector]
   WHEN expression1 THEN
    sequence_of_statements1;
   WHEN expression2 THEN
    sequence_of_statements2;
   ...
   WHEN expressionN THEN
    sequence_of_statementsN;
  [ELSE sequence_of_statementsN+1;]
END CASE [label_name];

Diikuti dengan kata kunci CASE adalah selector. Pernyataan CASE  PL / SQL mengevaluasi pemilih hanya sekali untuk menentukan urutan pernyataan yang akan dijalankan.

Diikuti oleh pemilih adalah sejumlah klausa WHEN. Jika nilai pemilih sama dengan expression dalam klausa WHEN, urutan pernyataan yang sesuai setelah kata kunci THEN dijalankan.

Jika nilai pemilih bukan salah satu pilihan yang tercakup dalam klausa WHEN, urutan pernyataan dalam klausa ELSE akan dieksekusi. Klausa ELSE bersifat opsional jadi jika kamu menghilangkannya. PL / SQL akan menambahkan klausa ELSE implisit berikut ini:

ELSE RAISE CASE_NOT_FOUND;
Jika kamu menggunakan klausa ELSE implisit dalam pernyataan CASE PL / SQL, pengecualian CASE_NOT_FOUND dinaikkan dan dapat ditangani di bagian penanganan pengecualian blok PL / SQL seperti biasa.

Klausa END CASE digunakan untuk mengakhiri pernyataan CASE.

Contoh Menggunakan Pernyataan CASE PL / SQL

Contoh berikut menunjukkan pernyataan CASE PL / SQL. Kami akan menggunakan tabel karyawan dalam data sampel SDM yang disediakan oleh Oracle untuk demonstrasi. 

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_pct    employees.commission_pct%TYPE;
  v_eval   varchar2(10);
  n_emp_id employees.employee_id%TYPE := 145;
BEGIN
  -- get commission percentage
  SELECT commission_pct
  INTO n_pct
  FROM employees
  WHERE employee_id = n_emp_id;

  -- evalutate commission percentage
  CASE n_pct
    WHEN 0 THEN
      v_eval := 'N/A';
    WHEN 0.1 THEN
      v_eval := 'Low';
    WHEN 0.4 THEN
      v_eval := 'High';
    ELSE
      v_eval := 'Fair';
  END CASE;
  -- print commission evaluation
  DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id ||
                       ' commission ' || TO_CHAR(n_pct) ||
                       ' which is '   || v_eval);
END;
/



PL / SQL searched CASE statement

PL / SQL memberikan pernyataan KASUS khusus yang disebut digeledah pernyataan CASE. Sintaks dari pernyataan CASE PL / SQL yang dicari adalah sebagai berikut:

[<<label_name>>]
CASE
   WHEN search_condition_1 THEN sequence_of_statements_1;
   WHEN search_condition_2 THEN sequence_of_statements_2;
   ...
   WHEN search_condition_N THEN sequence_of_statements_N;
  [ELSE sequence_of_statements_N+1;]
END CASE [label_name];


Laporan CASE yang dicari tidak memiliki pemilih. Setiap klausa WHEN dalam laporan CASE yang dicari berisi kondisi pencarian yang mengembalikan nilai Boolean.


Kondisi pencarian dievaluasi secara berurutan dari atas ke bawah. Jika kondisi pencarian dievaluasi ke TRUE, urutan pernyataan dalam klausa WHEN yang sesuai dijalankan dan kontrol dilewatkan ke pernyataan berikutnya, oleh karena itu, kondisi pencarian berikutnya diabaikan.


Jika tidak ada kondisi pencarian yang dievaluasi ke TRUE, urutan pernyataan dalam klausa ELSE akan dieksekusi.


Berikut ini adalah contoh penggunaan pernyataan 


SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_salary EMPLOYEES.SALARY%TYPE;
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := 200;
  v_msg    VARCHAR(20);
BEGIN
  SELECT salary
  INTO n_salary
  FROM employees
  WHERE employee_id = n_emp_id;

  CASE
    WHEN n_salary < 2000 THEN
      v_msg := 'Low';
    WHEN n_salary >= 2000 and n_salary <=3000 THEN
      v_msg := 'Fair';
    WHEN n_salary >= 3000 THEN
      v_msg := 'High';
  END CASE;
  DBMS_OUTPUT.PUT_LINE(v_msg);
END;
/


Dalam tutorial ini, Kita telah belajar bagaimana menggunakan pernyataan CASE PL / SQL dan mencari CASE untuk melakukan serangkaian pernyataan berdasarkan kondisi.





sumber asli : http://www.plsqltutorial.com/

Tuesday, October 17, 2017

PL/SQL Setting Up a Development Environment



Dalam tutorial ini, kita akan melakukan langkah demi langkah bagaimana mendownload dan menginstal Oracle Database untuk belajar dan berlatih pemrograman PL / SQL di sistem operasi .

Download dan instal Oracle Database


Pertama, kamu perlu pergi ke situs web Oracle dan mendownload Database Oracle. Kami akan mendownload Oracle Database 11g Release 2 di Microsoft Windows (x64).

Kedua, unzip file yang didownload ke dalam folder mis., C: \ setup \ Oracle sebagai berikut:


Ketiga, klik dua kali file setup.exe untuk mulai menginstal database Oracle. kamu harus mengikuti langkah-langkah seperti yang dijelaskan pada bagian berikut:

Langkah 1.


Pada langkah ini, kamu boleh mengisi alamat email untuk mendapatkan informasi terbaru tentang masalah keamanan dari Oracle.

PL / SQL instalasi Oracle Database langkah 1

Langkah 2.


Ada tiga pilihan pada langkah ini seperti yang ditunjukkan pada screenshot. Pilih yang pertama untuk membuat dan mengkonfigurasi database dan klik tombol Next.

PL / SQL instalasi Oracle Database langkah oracle 2

Langkah 3.


Jika Anda menginstal database Oracle di laptop atau desktop Anda, pilih opsi pertama, jika tidak, pilih yang kedua dan klik tombol Next.

PL / SQL instalasi Oracle Database


Langkah 4.


Langkah ini memungkinkan kamu memasukkan folder instalasi database lengkap. kamu dapat mengubah folder dasar Oracle mis., C: \ app \ zentut, folder lain diubah sesuai dengan itu. Setelah itu klik tombol Next untuk menuju ke langkah selanjutnya.

PL / SQL instalasi Oracle Database

Langkah 5.


Pada langkah ini, Oracle akan melakukan pemeriksaan prasyarat sebelum menginstal komponen database Oracle.

PL / SQL instalasi Oracle Database

Langkah 6.

PL / SQL instalasi Oracle Database

Langkah ini menunjukkan informasi ringkasan dari langkah-langkah sebelumnya. Klik tombol finish untuk mulai menginstal database Oracle.

Langkah 7.


Langkah ini menyalin file ke folder yang sesuai dan menginstal komponen dan layanan Oracle. Butuh beberapa menit untuk menyelesaikannya jadi mohon bersabar.


PL / SQL instalasi Oracle Database


Setelah selesai, installer menampilkan dialog Asisten Konfigurasi Database, klik tombol Manajemen Kata Sandi ... untuk menyiapkan kata sandi untuk pengguna yang berbeda.

Kita perlu membuka pengguna SYS, SYSTEM dan HR dan mengatur kata kunci yang sesuai.
instal langkah oracle 7 - DB config assistant

PL / SQL instalasi Oracle Database


instal langkah oracle 7 - DB config assistant - SYS users

PL / SQL instalasi Oracle Database

instal langkah oracle 7 - DB config assistant - HR user

PL / SQL instalasi Oracle Database

Langkah 8.


Setelah proses instalasi selesai, kamu bisa mengklik tombol untuk menutup installer.


PL / SQL instalasi Oracle Database

Verifikasi pemasangan

Jika semuanya baik-baik saja, kamu akan melihat folder Oracle sebagai berikut:
Folder Oracle
PL / SQL instalasi Oracle Database


Pertama, luncurkan SQL Plus yaitu tool antarmuka command line yang bisa kamu gunakan untuk berinteraksi dengan database Oracle.

Kedua, masukkan username dan password yang telah kamu tetapkan dalam proses instalasi. kita masukkan user HR dan password yang sesuai.

SQL plus
PL / SQL instalasi Oracle Database


Ketiga, masukkan pernyataan berikut:

SELECT * FROM dual;

Jika kamu melihat hasilnya seperti yang ditunjukkan pada screenshot berikut, ini berarti kamu telah menginstal database Oracle dengan sukses dan mulai belajar pemrograman PL / SQL.

Pilih dari tabel ganda


Dalam tutorial ini,kita telah pelajarilangkah demi langkah bagaimana menginstal database Oracle dan memverifikasi instalasi menggunakan SQL Plus. Kami harap kamu mendapatkan segalanya dengan benar pada saat pertama. Jika tidak demikian, tinjau setiap langkah sekali lagi dan buat koreksi yang sesuai jika perlu.


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

Friday, October 13, 2017

Pengantar PL / SQL IF Statement


Pernyataan SQL PL / SQL memungkinkan kamu untuk menjalankan urutan pernyataan secara kondisional. Pernyataan IF mengevaluasi suatu kondisi.

Kondisinya bisa menjadi sesuatu yang mengevaluasi nilai logis dari true atau false seperti perbandingan ekspresi atau kombinasi dari beberapa ekspresi perbandingan. kamu dapat membandingkan dua variabel jenis yang sama atau tipe convertible. Kamu bisa membandingkan dua literal. Selain itu, variabel Boolean dapat digunakan sebagai suatu kondisi.

Pernyataan PL / SQL IF memiliki tiga bentuk: IF-THEN, IF-THEN-ELSE dan IF-THEN-ELSIF.

Pernyataan PL / SQL IF-THEN


Berikut ini menggambarkan pernyataan IF-THEN:

IF condition THEN
   sequence_of_statements;
END IF;

Ini adalah bentuk pernyataan IF yang paling sederhana. Jika kondisi dievaluasi benar, urutan pernyataan akan dijalankan. Jika kondisinya salah atau NULL, pernyataan IF tidak melakukan apa-apa. Perhatikan bahwa END IF digunakan untuk menutup pernyataan IF, bukan ENDIF.

Contoh berikut menunjukkan pernyataan PL / SQL IF. Ini memperbarui gaji karyawan sampai tingkat menengah jika gaji karyawan lebih rendah daripada mid-range.

DECLARE
  n_min_salary NUMBER(6,0);
  n_max_salary NUMBER(6,0);
  n_mid_salary NUMBER(6,2);
  n_salary     EMPLOYEES.SALARY%TYPE;
  n_emp_id     EMPLOYEES.EMPLOYEE_ID%TYPE := 200;
BEGIN
  -- get salary range of the employee
  -- based on job
  SELECT min_salary,
         max_salary
  INTO n_min_salary,
       n_max_salary
  FROM JOBS
  WHERE JOB_ID = (SELECT JOB_ID
                 FROM EMPLOYEES
                 WHERE EMPLOYEE_ID = n_emp_id);

  -- calculate mid-range
  n_mid_salary := (n_min_salary + n_max_salary) / 2;
  -- get salary of the given employee
  SELECT salary
  INTO n_salary
  FROM employees
  WHERE employee_id = n_emp_id;

  -- update employee's salary if it is lower than
  -- the mid range
  IF n_salary < n_mid_salary THEN
    UPDATE employees
    SET salary = n_mid_salary
    WHERE employee_id = n_emp_id;
  END IF;
END;

Pernyataan PL / SQL IF-THEN-ELSE


Ini adalah bentuk pernyataan IF yang kedua. Klausa ELSE ditambahkan dengan urutan pernyataan alternatif. Berikut adalah sintaks dari pernyataan IF-ELSE.

IF condition THEN
   sequence_of_if_statements;
ELSE
   sequence_of_else_statements;
END IF;
Jika kondisinya NULL atau false, urutan pernyataan lain akan dieksekusi.

Misalkan kamu ingin menaikkan gaji untuk seorang karyawan ke mid-range jika gaji saat ini lebih rendah dari pada mid-range pekerjaan jika tidak, tingkatkan sebesar 5%. Dalam kasus ini, Anda bisa mengganti kode di atas dengan menggunakan pernyataan PL / SQL IF-THEN-ELSE sebagai berikut:

  -- update employee's salary if it is lower than
  -- the mid range, otherwise increase 5%
  IF n_salary < n_mid_salary THEN
    UPDATE employees
    SET salary = n_mid_salary
    WHERE employee_id = n_emp_id;
  ELSE
    UPDATE employees
    SET salary = salary + salary * 5 /100
    WHERE employee_id = n_emp_id;
  END IF;

Pernyataan PL / SQL IF-THEN-ELSIF


PL / SQL mendukung pernyataan IF-THEN-ELSIF untuk memungkinkanmu mengeksekusi urutan pernyataan berdasarkan beberapa kondisi.

Sintaks PL / SQL IF-THEN-ELSIF adalah sebagai berikut:

IF condition1  THEN
   sequence_of_statements1
ELSIF condition2 THEN
   sequence_of_statements2
ELSE
   sequence_of_statements3
END IF;

Perhatikan bahwa pernyataan IF dapat memiliki sejumlah klausa ELSIF. Jika kondisi pertama salah atau NULL, kondisi kedua di ELSIF diperiksa dan seterusnya. Jika semua kondisi NULL atau false, urutan pernyataan dalam klausa ELSE akan dijalankan.

Perhatikan bahwa klausa ELSE terakhir bersifat opsional, jadi jika bisa menghilangkannya. Jika kondisi dari atas ke bawah benar, urutan pernyataan yang sesuai akan dijalankan.

Contoh berikut menggambarkan pernyataan PL / SQL IF-THEN-ELSIF untuk mencetak pesan yang sesuai saat gaji karyawan lebih tinggi daripada mid-range, lebih rendah dari mid-range atau sama dengan mid-range.

DECLARE
  n_min_salary NUMBER(6,0);
  n_max_salary NUMBER(6,0);
  n_mid_salary NUMBER(6,2);
  n_salary     EMPLOYEES.SALARY%TYPE;
  n_emp_id     EMPLOYEES.EMPLOYEE_ID%TYPE := 200;
BEGIN
  -- get salary range of the employee
  -- based on job
  SELECT min_salary,
         max_salary
  INTO n_min_salary,
       n_max_salary
  FROM JOBS
  WHERE JOB_ID = (SELECT JOB_ID
                 FROM EMPLOYEES
                 WHERE EMPLOYEE_ID = n_emp_id);

  -- calculate mid-range
  n_mid_salary := (n_min_salary + n_max_salary) / 2;
  -- get salary of the given employee
  SELECT salary
  INTO n_salary
  FROM employees
  WHERE employee_id = n_emp_id;

  -- update employee's salary if it is lower than
  -- the mid range, otherwise increase 5%
  IF n_salary > n_mid_salary THEN
    DBMS_OUTPUT.PUT_LINE('Employee ' || TO_CHAR(n_emp_id) ||
                         ' has salary $' || TO_CHAR(n_salary) ||
                         ' higher than mid-range $' || TO_CHAR(n_mid_salary));
  ELSIF n_salary < n_mid_salary THEN
    DBMS_OUTPUT.PUT_LINE('Employee ' || TO_CHAR(n_emp_id) ||
                         ' has salary $' || TO_CHAR(n_salary) ||
                         ' lower than mid-range $' || TO_CHAR(n_mid_salary));

  ELSE
    DBMS_OUTPUT.PUT_LINE('Employee ' || TO_CHAR(n_emp_id) ||
                         ' has salary $' || TO_CHAR(n_salary) ||
                         ' equal to mid-range $' || TO_CHAR(n_mid_salary));
  END IF;
END;

Pada tutorial ini, kamu telah belajar bagaimana menggunakan berbagai bentuk pernyataan PL / SQL IF termasuk pernyataan IF-THEN IF-THEN-ELSE dan IF-THEN-ELSIF.


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

Thursday, October 12, 2017

Pengantar Prosedur PL / SQL


Seperti fungsi PL / SQL, prosedur PL / SQL adalah blok bernama yang melakukan tugas tertentu. Prosedur PL / SQL memungkinkan kamu mengenkapsulasi logika bisnis yang kompleks dan menggunakannya kembali di lapisan database dan lapisan aplikasi.

Berikut ini menggambarkan sintaks prosedur PL / SQL:

PROCEDURE [schema.]name[( parameter[, parameter...] ) ]
[AUTHID DEFINER | CURRENT_USER]
IS
[--declarations  statements]
BEGIN
--executable statements
[ EXCEPTION
---exception handlers]
END [name];

Mari kita periksa sintaks PL / SQL secara lebih rinci. Kita bisa membagi prosedur PL / SQL menjadi dua bagian: header dan body.


PL / SQL Procedure Header

Bagian sebelum kata kunci IS disebut perintah prosedur header atau prosedur. Elemen dalam header prosedur dijelaskan sebagai berikut:

  • Schema:  nama skema opsional yang menjadi prosedurnya. Defaultnya adalah pengguna saat ini. Jika kamu menentukan pengguna yang berbeda, pengguna saat ini harus memiliki hak istimewa untuk membuat prosedur dalam skema itu.
  • Name:  nama prosedur Nama prosedur, menurut konvensi, harus dimulai dengan kata kerja mis., Put_line
  • Parameters:  daftar parameter pilihan Silakan lihat fungsi PL / SQL untuk informasi lebih lanjut tentang parameter dengan mode yang berbeda IN, OUT dan IN OUT.
  • AUTHID:   AUHTID opsional menentukan apakah prosedur akan dijalankan dengan hak istimewa pemilik (DEFINER) dari prosedur atau dengan hak istimewa pengguna saat ini yang ditentukan oleh CURRENT_USER.

PL / SQL Procedure Body

Semuanya setelah kata kunci IS dikenal sebagai procedure body. Badan prosedur memiliki sintaks yang sama dengan blok anonim yang terdiri dari bagian deklarasi, eksekusi dan pengecualian.

Bagian deklarasi dan pengecualian bersifat opsional. Kamu harus memiliki setidaknya satu pernyataan yang dapat dieksekusi di bagian eksekusi. Bagian eksekusi adalah di mana kamu meletakkan kode untuk menerapkan logika bisnis tertentu untuk melakukan tugas tertentu.

Dalam PL / SQL prosedur  dapat memiliki pernyataan RETURN. Namun, tidak seperti pernyataan RETURN pada fungsi yang mengembalikan nilai pada program panggilan, pernyataan RETURN dalam prosedur hanya digunakan untuk menghentikan eksekusi prosedur dan kontrol kembali ke pemanggil.

Pernyataan RETURN dalam prosedur tidak mengambil ekspresi atau konstan.

Contoh Prosedur PL / SQL


Kita akan membuat sebuah prosedur bernama adjust_salary () dalam database sampel SDM yang disediakan oleh Oracle. Kita akan mengupdate informasi gaji pegawai di meja karyawan dengan menggunakan statemen SQL UPDATE.

Berikut ini adalah kode sumber dari prosedur adjust_salary ():

 CREATE OR REPLACE PROCEDURE adjust_salary(
    in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE,
    in_percent IN NUMBER
) IS
BEGIN
   -- update employee's salary
   UPDATE employees
   SET salary = salary + salary * in_percent / 100
   WHERE employee_id = in_employee_id;
END;


Bagaimana cara kerjanya

  • Prosedur ini memiliki dua parameter: IN_EMPLOYEE_ID dan IN_PERCENT.
  • Prosedur ini menyesuaikan gaji karyawan tertentu yang ditentukan IN_EMPLOYEE_ID dengan persentase IN_PERCENT tertentu.
  • Di bagian prosedur, kami menggunakan pernyataan UPDATE untuk memperbarui informasi gaji.

Mari kita lihat bagaimana memanggil prosedur ini dalam berbagai konteks.

Memanggil Prosedur PL / SQL


Prosedur dapat memanggil prosedur lain. Suatu prosedur tanpa parameter dapat dipanggil secara langsung dengan menggunakan pernyataan EXEC atau EXECUTE statement diikuti dengan nama prosedur sebagai berikut:

EXEC procedure_name ();
EXEC procedure_name;


Prosedur dengan parameter dapat dipanggil dengan menggunakan pernyataan EXEC atau EXECUTE yang diikuti dengan nama prosedur dan parameternya sesuai urutan daftar parameter prosedur seperti yang ditunjukkan di bawah ini:

EXEC procedure_name (param1, param2 ... paramN);


Sekarang, kita bisa memanggil prosedur adjust_salary () sebagai pernyataan berikut:

-- before adjustment
SELECT salary FROM employees WHERE employee_id = 200;
-- call procedure
exec adjust_salary(200,5);
-- after adjustment
SELECT salary FROM employees WHERE employee_id = 200;
Dalam tutorial ini, kami telah perkenalkan prosedur PL / SQL dan menunjukkan kepada kamu langkah demi langkah bagaimana mengembangkan dan memanggil prosedur PL / SQL yang menyesuaikan gaji karyawan di database HR.


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

Wednesday, October 11, 2017

Perkenalan fungsi PL / SQL


Fungsi PL / SQL adalah blok bernama yang menghasilkan nilai. Fungsi PL / SQL juga dikenal sebagai subrutin atau subprogram. Untuk membuat fungsi PL / SQL, Kamu bisa menggunakan sintaks berikut:

CREATE [OR REPLACE] FUNCTION function_name [(
   parameter_1 [IN] [OUT] data_type,
   parameter_2 [IN] [OUT] data_type,
   parameter_N [IN] [OUT] data_type]
    RETURN return_data_type IS
--the declaration statements
BEGIN
   -- the executable statements
   return return_data_type;
   EXCEPTION
    -- the exception-handling statements
END;
/


Mari kita periksa sintaks untuk membuat fungsi secara lebih rinci:

Kamu harus menentukan nama fungsi function_name setelah kata kunci FUNCTION. Dengan konvensi, nama fungsi harus dimulai dengan kata kerja, misalnya convert_to_number.

Fungsi mungkin memiliki nol atau lebih dari satu parameter. kamu bisa menentukan nama parameter di parameter_1, parameter_2, dll. Kamu harus menentukan jenis data dari setiap parameter secara eksplisit di data_type. Setiap parameter memiliki satu dari tiga mode: IN, OUT dan IN OUT.

  • Parameter IN adalah parameter read-only. Jika fungsi mencoba mengubah nilai parameter IN, compiler akan mengeluarkan pesan kesalahan. kamu bisa melewati variabel konstanta, literal, inisialisasi, atau ekspresi ke fungsi sebagai parameter IN.
  • Parameter OUT adalah parameter write-only. Parameter OUT digunakan untuk mengembalikan nilai kembali ke program pemanggilan. Parameter OUT diinisialisasi ke nilai default dari jenisnya saat fungsi dimulai terlepas dari nilai awalnya sebelum diteruskan ke fungsi.
  • Parameter IN OUT adalah parameter baca dan tulis. Ini berarti fungsi tersebut membaca nilainya dari parameter IN OUT, mengubah nilainya dan mengembalikannya kembali ke program pemanggilan.

Fungsi harus memiliki setidaknya satu pernyataan RETURN di bagian eksekusi. Klausa RETURN pada header fungsi menentukan tipe data dari nilai yang dikembalikan.

Struktur blok fungsi mirip dengan blok anonim dengan bagian header fungsi tambahan.

Contoh Fungsi PL / SQL


Kita akan membuat sebuah fungsi bernama try_parse yang mem-parsing sebuah string dan mengembalikan sebuah angka jika input string adalah angka atau NULL jika tidak dapat dikonversi ke angka.

CREATE OR REPLACE FUNCTION try_parse(
    iv_number IN VARCHAR2)
  RETURN NUMBER IS
BEGIN
   RETURN to_number(iv_number);
   EXCEPTION
     WHEN others THEN
        RETURN NULL;
END;

iv_number adalah parameter IN yang tipe datanya adalah VARCHAR2 sehingga Anda bisa melewati string apapun ke fungsi try_parse ().

Di dalam fungsi tersebut, kami menggunakan fungsi PL / SQL bawaan yang bernama to_number () untuk mengubah string menjadi angka. Jika ada pengecualian terjadi, fungsi mengembalikan NULL di bagian pengecualian, jika tidak, ia mengembalikan sebuah angka.

Memanggil Fungsi PL / SQL


Fungsi PL / SQL mengembalikan sebuah nilai sehingga kamu dapat menggunakannya di sisi kanan sebuah tugas atau dalam sebuah pernyataan SELECT.

Mari buat blok anonim untuk menggunakan fungsi try_parse ().

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_x number;
  n_y number;
   n_z number;
BEGIN
   n_x := try_parse('574');
   n_y := try_parse('12.21');
   n_z := try_parse('abcd');

   DBMS_OUTPUT.PUT_LINE(n_x);
   DBMS_OUTPUT.PUT_LINE(n_y);
   DBMS_OUTPUT.PUT_LINE(n_z);
END;
/

Kita juga bisa menggunakan fungsi try_parse () dalam sebuah pernyataan SELECT sebagai berikut:

SELECT try_parse('1234') FROM dual;

SELECT try_parse('Abc') FROM dual;

Perhatikan bahwa tabel ganda tabel satu baris khusus yang digunakan untuk memilih pseudo-column seperti contoh di atas.

Dalam tutorial ini, kamu telah belajar bagaimana mengembangkan fungsi PL / SQL kustom dan menyebutnya dalam blok anonim dan dalam statemen SELECT SQL.


 sumber referensi  : http://www.plsqltutorial.com

Popular Posts