Apa itu Nested Blocks Oracle?
Di PL / SQL, setiap blok boleh disarang menjadi blok lain. Mereka disebut sebagai blok bersarang. Blok bersarang sangat umum ketika kita ingin melakukan proses tertentu, dan pada masa yang sama, kod untuk proses ini harus disimpan di dalam bekas yang terpisah (blok).
Konsep blok bersarang akan membantu pengaturcara untuk meningkatkan kebolehbacaan dengan memisahkan perkara-perkara kompleks ke dalam setiap blok dan menangani pengecualian bagi setiap blok di dalam blok luar utama.
Dalam tutorial ini, anda akan belajar-
- Struktur Blok Bersarang
- Skop di Blok Bersarang: Skop Pembolehubah
Struktur Blok Bersarang
Blok boleh disarang ke blok lain. Ini boleh bersarang di bahagian pelaksanaan atau bahagian pengendalian pengecualian. Blok ini juga boleh dilabelkan. Satu blok luar boleh mengandungi banyak blok dalaman. Setiap blok dalaman sekali lagi menjadi blok PL / SQL, oleh itu semua sifat dan ciri blok dalaman akan sama dengan blok luar. Gambar di bawah memberikan gambaran perwakilan struktur blok bersarang. Blok ibu bapa adalah blok utama dan blok anak adalah blok bersarang.
Berikut adalah sintaks untuk blok bersarang.
Sintaks Blok Bersarang
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Sintaks di atas menunjukkan blok bersarang yang mengandungi sejumlah dua blok.
- Blok-blok ini dilabelkan sebagai 'external_block' dan 'inner_block'
Skop di Blok Bersarang: Skop Pembolehubah
Di blok bersarang, seseorang perlu memahami ruang lingkup dan keterlihatan setiap blok dengan jelas sebelum menggunakannya. Terutama di blok dalaman, unsur-unsur dari blok luar dan dalam akan kelihatan, Oleh itu diperlukan pemahaman yang betul mengenai perkara ini.
Titik di bawah akan merangkum lebih banyak mengenai ruang lingkup di blok bersarang.
- Unsur-unsur yang dinyatakan dalam blok luar dan nilai yang ditakrifkan sebelum definisi blok dalaman dapat dilihat di dalam blok dalam.
- Unsur-unsur yang dinyatakan dalam blok dalaman tidak dapat dilihat di blok luar. Mereka hanya dapat dilihat dalam blok dalaman.
- Blok luar dan blok dalaman boleh mempunyai pemboleh ubah dengan nama yang sama.
- Sekiranya pemboleh ubah dengan nama yang sama, blok dalaman secara lalai, akan merujuk kepada pemboleh ubah yang dinyatakan dalam blok dalaman sahaja.
- Sekiranya blok dalam mahu merujuk pemboleh ubah blok luar yang mempunyai nama yang sama dengan blok dalaman, maka blok luar harus DILARANG, dan pemboleh ubah blok luar dapat disebut sebagai '
. '
Contoh di bawah akan membantu memahami lebih lanjut mengenai ruang lingkup ini.
Contoh 1 : Dalam contoh ini, kita akan melihat skop pemboleh ubah dalam blok dalam dan luar. Juga, kita akan melihat bagaimana merujuk pemboleh ubah menggunakan label blok.
<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN< >DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/
Penjelasan Kod:
- Baris kod 1 : Melabel blok luar sebagai "OUTER_BLOCK".
- Baris kod 3 : Menyatakan pemboleh ubah 'var1' sebagai VARCHAR2 (30) dengan nilai awal "blok luar".
- Baris kod 4 : Menyatakan pemboleh ubah 'var2' sebagai VARCHAR2 (30) dengan nilai awal "nilai sebelum blok dalam".
- Baris kod 6: Melabel blok dalaman sebagai "INNER_BLOCK"
- Baris kod 8: Menyatakan pemboleh ubah 'var1' di blok dalam sebagai VARCHAR2 (30) dengan nilai awal "blok dalaman".
- Baris kod 10: Mencetak nilai 'var1'. Oleh kerana tidak ada label yang disebut secara lalai, ia akan mengambil nilai dari blok dalaman, oleh itu mencetak mesej 'inner_block'.
- Baris kod 11: Mencetak nilai pemboleh ubah blok luar 'var1'. Oleh kerana blok dalaman mempunyai pemboleh ubah dengan nama yang sama, kita perlu merujuk pada label blok luar. Oleh itu mencetak mesej 'blok luar'.
- Baris kod 12: Mencetak nilai pemboleh ubah blok luar 'var2'. Oleh kerana tidak ada pemboleh ubah dengan nama ini yang terdapat di blok dalam, secara lalai ia akan mengambil nilai dari blok luar, oleh itu mencetak pesan 'nilai sebelum blok dalam'.
- Pemboleh ubah 'var2' di blok luar telah ditetapkan dengan nilai 'nilai selepas blok dalam'. Tetapi tugasan ini telah berlaku setelah definisi blok dalaman. Oleh itu nilai ini tidak terdapat dalam blok dalaman.
Contoh 2 : Dalam contoh ini, kita akan mencari perbezaan antara dua nombor, satu dinyatakan di blok luar dan satu lagi di blok dalaman. Kedua-duanya akan mempunyai nama yang sama. Mari lihat bagaimana label blok berguna dalam merujuk pemboleh ubah ini.
<>DECLAREln_val NUMBER :=5;BEGIN< >DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/
Penjelasan Kod:
- Baris kod 1 : Melabel blok luar sebagai "OUTER_BLOCK".
- Baris kod 3 : Menyatakan pemboleh ubah 'ln_val' sebagai NOMBOR dengan nilai awal "5".
- Baris kod 5: Melabel blok dalaman sebagai "INNER_BLOCK"
- Baris kod 7: Menyatakan pemboleh ubah 'ln_val' dalam blok dalam sebagai NOMBOR dengan nilai awal "3".
- Baris kod 9: Mencetak perbezaan nilai 'ln_val' dari blok luar dan dalam. Format "
. " digunakan untuk merujuk pemboleh ubah ini untuk mengelakkan konflik kerana nama pemboleh ubah yang sama.
Ringkasan
Dalam tutorial ini, kami telah belajar bagaimana membuat blok bersarang dan bagaimana menangani skop di blok dalam dan blok luar. Kami juga telah melihat contoh di mana pemboleh ubah dari blok dalam dan luar disebut di dalam blok dalam.