Tuesday, October 10, 2017

Perkenalan dengan PL / SQL Nested Block

Nested Block berarti menanamkan satu atau lebih blok PL / SQL di dalam blok PL / SQL lain yang memberi kamu kendali yang lebih baik terhadap eksekusi program dan exception handling.

Mari kita lihat contoh berikut ini:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1;
BEGIN
  DECLARE
    n_emp_id employees.employee_id%TYPE := &emp_id2;
    v_name   employees.first_name%TYPE;
  BEGIN
    SELECT first_name
    INTO v_name
    FROM employees
    WHERE employee_id = n_emp_id;

    DBMS_OUTPUT.PUT_LINE('First name of employee ' || n_emp_id ||
                                       ' is ' || v_name);
    EXCEPTION
      WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found');
  END;
END;
/


Kita memiliki blok PL / SQL yang bersarang di dalam blok PL / SQL lain pada contoh di atas. Blok PL / SQL luar disebut blok induk atau blok penutup dan blok PL / SQL bagian dalam dikenal sebagai balok anak, blok bersarang atau blok tertutup.

PL / SQL bersarang blok



Jika kamu melihat kode dengan hati-hati, kamu akan melihat bahwa kita memiliki dua variabel dengan nama yang sama n_emp_id di bagian deklarasi blok orang tua dan anak. Hal ini diperbolehkan dalam skenario ini.

Pertanyaannya di sini adalah variabel mana yang diterima oleh pernyataan SELECT? Jika kamu menjalankan kode di SQL * PLUS kamu akan melihat bahwa pernyataan SELECT akan menerima variabel di blok anak. Mengapa? Karena PL / SQL memberikan preferensi pertama pada variabel di dalam bloknya sendiri.

Jika variabel tidak ditemukan, PL / SQL akan mencari variabel di blok induk dan mengatasinya. Jika tidak ada variabel seperti itu, PL / SQL akan mengeluarkan kesalahan. Dalam kasus ini, variabel v_emp_id di blok anak menimpa variabel di blok induk.

Perhatikan bahwa bukan praktik yang baik untuk memiliki beberapa variabel yang memiliki nama yang sama di blok yang berbeda. Kami mengambil contoh ini hanya untuk demonstrasi saja.

Label Blok PL / SQL

Jadi bagaimana jika kamu ingin merujuk pada variabel di blok induk di dalam blok anak di contoh di atas? PL / SQL memberi Anda fitur yang disebut label blok sehingga kamu dapat memenuhi semua referensi ke variabel di dalam blok melalui label.

Untuk memberi label blok, kamu hanya perlu memberi label nama sebelum bagian deklarasi sebagai berikut:

<<block_label>>
DECLARE
...
BEGIN
...
END;

Kemudian, Anda bisa merujuk ke sebuah variabel di dalam blok dengan menggunakan notasi titik (.) Seperti di bawah ini:

block_label.variable_name;
Berikut adalah contoh sederhana penggunaan label blok:

SET SERVEROUTPUT ON SIZE 1000000;
<<label>>
DECLARE
  v_name varchar2(25) := 'Maria';
BEGIN
  DBMS_OUTPUT.PUT_LINE(label.v_name);
END;
/

Dan kita bisa menulis ulang contoh yang memiliki beberapa variabel dengan nama yang sama menggunakan label blok sebagai berikut:

SET SERVEROUTPUT ON SIZE 1000000;
<<parent>>
DECLARE
  n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1;
BEGIN
  <<child>>
  DECLARE
    n_emp_id employees.employee_id%TYPE := &emp_id2;
    v_name   employees.first_name%TYPE;
  BEGIN
    SELECT first_name
    INTO v_name
    FROM employees
    WHERE employee_id = parent.n_emp_id;

    DBMS_OUTPUT.PUT_LINE('First name of employee ' || parent.n_emp_id ||
                         ' is ' || child.v_name);

    EXCEPTION
      WHEN no_data_found THEN
        DBMS_OUTPUT.PUT_LINE('Employee ' || parent.n_emp_id || ' not found');
  END;
END;
/

Ada beberapa keuntungan menggunakan label blok PL / SQL:

  •     Perbaiki keterbacaan kode.
  •     Dapatkan kontrol eksekusi kode yang lebih baik karena label blok bisa menjadi sasaran pernyataan EXIT dan CONTINUE.
  •     Memungkinkan Anda untuk memenuhi syarat referensi ke variabel di blok induk yang memiliki nama yang sama dengan variabel di blok anak menggunakan notasi titik (.)

Dalam tutorial ini, kamu telah belajar bagaimana bekerja dengan PL / SQL nested block dan bagaimana menggunakan label blok untuk memenuhi syarat referensi ke variabel dari blok induk yang memiliki nama yang sama dengan variabel pada blok anak.


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

0 comments:

Post a Comment

Popular Posts