Lingkup Variabel PL/SQL & Blok Luar Dalam: Struktur Bersarang
Apa itu Blok Bersarang Oracle?
Dalam PL/SQL, setiap blok dapat disarangkan ke dalam blok lain. Mereka disebut sebagai blok bersarang. Blok bersarang sangat umum ketika kita ingin melakukan proses tertentu, dan pada saat yang sama, kode untuk proses ini harus disimpan dalam wadah (blok) terpisah.
Konsep blok bersarang akan membantu programmer untuk meningkatkan keterbacaan dengan memisahkan hal-hal yang rumit ke dalam setiap blok dan menangani pengecualian untuk setiap blok di dalam blok luar utama.
Struktur Blok Bersarang
Sebuah blok dapat disarangkan ke dalam blok lain. Ini dapat disarangkan di bagian eksekusi atau di penanganan pengecualian bagian. Blok ini juga dapat diberi label. Satu blok luar bisa berisi banyak blok dalam. Setiap blok dalam sekali lagi a blok PL/SQL, maka semua properti dan karakteristik blok dalam akan sama dengan blok luar. Gambar di bawah memberikan representasi bergambar struktur blok bersarang. Blok induk adalah blok utama dan blok anak adalah blok yang disarangkan.
Di bawah ini adalah sintaks untuk blok bersarang.
Sintaks Blok Bersarang
<<outer_block>> DECLARE <Declarative section> BEGIN <Execution part for outer block begins> <<inner block>> DECLARE <Declarative section> BEGIN <Execution part for inner block>. EXCEPTION <Exception handling part> END; <Execution part for outer block begins> EXCEPTION <Exception handling part> END;
- Sintaks di atas menunjukkan blok bersarang yang berisi total dua blok.
- Blok-blok ini diberi label sebagai 'blok_luar' dan 'blok_dalam'
Cakupan di Blok Bersarang: Cakupan Variabel
Di blok bersarang, seseorang perlu memahami cakupan dan visibilitas setiap blok dengan jelas sebelum menggunakannya. Khususnya pada blok dalam, elemen-elemen dari blok luar dan dalam akan terlihat, Oleh karena itu diperlukan pemahaman yang tepat tentang hal ini.
Poin-poin di bawah ini akan merangkum lebih lanjut mengenai cakupan dalam blok bersarang.
- Elemen yang dideklarasikan di blok luar dan nilai yang ditentukan sebelum definisi blok dalam terlihat di dalam blok dalam.
- Elemen yang dideklarasikan di blok dalam tidak terlihat di blok luar. Mereka hanya terlihat di dalam blok dalam.
- Blok luar dan blok dalam dapat memiliki variabel dengan nama yang sama.
- Jika ada variabel dengan nama yang sama, blok dalam secara default akan mengacu pada variabel yang dideklarasikan di blok dalam saja.
- Jika blok dalam ingin merujuk pada variabel blok luar yang memiliki nama yang sama dengan blok dalam, maka blok luar harus diberi LABEL, dan variabel blok luar dapat disebut sebagai ' . '
Contoh di bawah ini akan membantu untuk memahami lebih lanjut tentang cakupan ini.
Contoh 1: Dalam contoh ini, kita akan melihat cakupan variabel di blok dalam dan luar. Selain itu, kita akan melihat cara mereferensikan variabel menggunakan label blok.
<<OUTER_BLOC>> DECLARE varl VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block’; BEGIN <<NNER_BLOCK>> DECLARE varl VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(varl), dbms_output.put_line(OUTER_BLOCKvar1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Penjelasan Kode:
- Baris kode 1: Memberi label pada blok luar sebagai “OUTER_BLOCK”.
- Baris kode 3: Mendeklarasikan variabel 'var1' sebagai VARCHAR2 (30) dengan nilai awal “blok luar”.
- Baris kode 4: Mendeklarasikan variabel 'var2' sebagai VARCHAR2 (30) dengan nilai awal “nilai sebelum blok dalam”.
- Baris kode 6: Memberi label pada blok bagian dalam sebagai “INNER_BLOCK”
- Baris kode 8: Mendeklarasikan variabel 'var1' di blok dalam sebagai VARCHAR2 (30) dengan nilai awal “blok dalam”.
- Baris kode 10: Mencetak nilai 'var1'. Karena tidak ada label yang disebutkan secara default, maka akan mengambil nilai dari blok dalam, sehingga mencetak pesan 'blok_dalam'.
- Baris kode 11: Mencetak nilai variabel blok luar 'var1'. Karena blok dalam mempunyai variabel dengan nama yang sama, kita perlu mengacu pada label blok luar. Sehingga mencetak pesan 'blok luar'.
- Baris kode 12: Mencetak nilai variabel blok luar 'var2'. Karena tidak ada variabel dengan nama ini di blok dalam, secara default ia akan mengambil nilai dari blok luar, sehingga mencetak pesan 'nilai sebelum blok dalam'.
- Variabel 'var2' di blok luar telah diberi nilai 'nilai setelah blok dalam'. Namun penugasan ini terjadi setelah definisi blok dalam. Oleh karena itu nilai ini tidak ada di blok dalam.
Contoh 2: Dalam contoh ini, kita akan mencari selisih antara dua angka, satu dideklarasikan di blok luar dan satu lagi di blok dalam. Keduanya akan memiliki nama yang sama. Mari kita lihat bagaimana label blok berguna dalam merujuk variabel-variabel ini.
<<OUTER_BLOC>> DECLARE ln_val NUMBER :=5; BEGIN <<INNERBLOC>> DECLARE ln_val NUMBER :=3; BEGIN dbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val); END; END; /
Penjelasan Kode:
- Baris kode 1: Memberi label pada blok luar sebagai “OUTER_BLOCK”.
- Baris kode 3: Mendeklarasikan variabel 'ln_val' sebagai NUMBER dengan nilai awal “5”.
- Baris kode 5: Memberi label pada blok bagian dalam sebagai “INNER_BLOCK”
- Baris kode 7: Mendeklarasikan variabel 'ln_val' di blok dalam sebagai NUMBER dengan nilai awal “3”.
- Baris kode 9: Mencetak selisih nilai 'ln_val' dari blok luar dan dalam. “ . Format ” digunakan untuk merujuk variabel-variabel ini untuk menghindari konflik karena nama variabel yang sama.
Kesimpulan
Dalam tutorial ini, kita telah mempelajari cara membuat blok bersarang dan cara menangani cakupan di blok dalam dan blok luar. Kita juga telah melihat contoh dimana variabel dari blok dalam dan luar dirujuk ke dalam blok dalam.