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