Phạm vi biến PL/SQL & Khối bên trong bên ngoài: Cấu trúc lồng nhau
⚡ Tóm tắt thông minh
Các khối lồng nhau trong PL/SQL đặt một khối bên trong một khối khác, cho phép bạn tách biệt logic phức tạp và cô lập việc xử lý ngoại lệ. Hiểu rõ phạm vi biến giữa khối bên ngoài và khối bên trong, và sử dụng nhãn khối, giúp các biến có cùng tên không gây nhầm lẫn.

Khối lồng nhau là gì Oracle?
In PL / SQLMỗi khối có thể được lồng ghép bên trong một khối khác. Khối như vậy được gọi là khối lồng nhau. Khối lồng nhau rất phổ biến khi bạn muốn thực hiện một quy trình nhất định trong khi vẫn giữ cho...ping Mã lệnh cho quy trình đó nằm trong một vùng chứa (khối) riêng biệt.
Khái niệm khối lồng nhau giúp lập trình viên cải thiện khả năng đọc hiểu bằng cách tách logic phức tạp thành các khối riêng biệt, và nó cho phép... ngoại lệ cho mỗi khối cần được xử lý bên trong khối chính bên ngoài.
Cấu trúc khối lồng nhau
Một khối lệnh có thể được lồng bên trong một khối lệnh khác. Nó có thể được lồng trong phần thực thi hoặc trong phần xử lý ngoại lệ, và các khối lệnh này cũng có thể được gắn nhãn. Một khối lệnh bên ngoài có thể chứa nhiều khối lệnh bên trong. Mỗi khối lệnh bên trong bản thân nó là một khối lệnh. Khối PL/SQLNhư vậy, tất cả các thuộc tính và đặc điểm của khối bên trong đều giống với khối bên ngoài. Khối cha là khối chính, và khối con là khối lồng nhau.
Hình ảnh bên dưới minh họa cấu trúc khối lồng nhau, trong đó khối cha là khối chính và khối con là khối lồng nhau.
Dưới đây là cú pháp cho khối lồng nhau. Ảnh chụp màn hình bên dưới hiển thị cú pháp khối lồng nhau với các khối bên ngoài và bên trong được đánh dấu.
Cú pháp khối lồng nhau
<<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;
- Cú pháp trên thể hiện khối lồng nhau chứa tổng cộng hai khối.
- Các khối này được đặt tên là 'outer_block' và 'inner_block'.
Phạm vi trong Khối lồng nhau: Phạm vi thay đổi
Trong một khối lồng nhau, bạn cần hiểu rõ phạm vi và khả năng hiển thị của từng khối trước khi sử dụng chúng. Đặc biệt trong khối bên trong, các phần tử từ cả khối bên ngoài và khối bên trong đều hiển thị, vì vậy việc hiểu đúng điều này là rất cần thiết.
Các điểm dưới đây tóm tắt phạm vi trong các khối lồng nhau.
- Các phần tử được khai báo trong khối bên ngoài và giá trị được định nghĩa trước khi định nghĩa khối bên trong đều hiển thị bên trong khối bên trong.
- Các phần tử được khai báo trong khối bên trong không hiển thị trong khối bên ngoài. Chúng chỉ hiển thị bên trong khối bên trong.
- Khối bên ngoài và khối bên trong có thể có biến cùng tên.
- Trong trường hợp các biến có cùng tên, theo mặc định khối bên trong chỉ tham chiếu đến biến được khai báo trong chính khối bên trong đó.
- Nếu khối bên trong muốn tham chiếu đến biến của khối bên ngoài có cùng tên với biến của khối bên trong, thì khối bên ngoài phải được gắn nhãn, và biến của khối bên ngoài có thể được tham chiếu là ' . '
Ví dụ dưới đây sẽ giúp bạn hiểu rõ hơn về các phạm vi này.
Ví dụ 1: Trong ví dụ này, chúng ta thấy phạm vi của các biến trong khối bên trong và bên ngoài. Chúng ta cũng thấy cách tham chiếu đến các biến bằng cách sử dụng nhãn khối.
Ảnh chụp màn hình bên dưới hiển thị Ví dụ 1, trong đó khối bên trong tham chiếu đến một biến của khối bên ngoài bằng cách sử dụng nhãn khối.
<<OUTER_BLOCK>> DECLARE var1 VARCHAR2(30):='outer_block'; var2 VARCHAR2(30):='value before inner block'; BEGIN <<INNER_BLOCK>> DECLARE var1 VARCHAR2(30):='inner_block'; BEGIN dbms_output.put_line(var1); dbms_output.put_line(OUTER_BLOCK.var1); dbms_output.put_line(var2); END; var2:='value after inner block'; END; /
Code Giải thích:
- Code dòng 1: Đặt tên cho khối bên ngoài là “OUTER_BLOCK”.
- Code dòng 3: Khai báo biến 'var1' là VARCHAR2 (30) với giá trị ban đầu là “outer_block”.
- Code dòng 4: Khai báo biến 'var2' là VARCHAR2 (30) với giá trị ban đầu là “giá trị trước khối bên trong”.
- Code dòng 6: Đặt tên cho khối bên trong là “INNER_BLOCK”.
- Code dòng 8: Khai báo biến 'var1' trong khối bên trong là VARCHAR2 (30) với giá trị ban đầu là “inner_block”.
- Code dòng 10: In ra giá trị của 'var1'. Vì không có nhãn nào được đề cập, theo mặc định nó sẽ lấy giá trị từ khối bên trong, do đó in ra thông báo 'inner_block'.
- Code dòng 11: In ra giá trị của biến 'var1' trong khối ngoài. Vì khối trong có một biến cùng tên, nên ta tham chiếu đến nhãn của khối ngoài. Do đó, nó in ra thông báo 'outer_block'.
- Code dòng 12: In ra giá trị của biến 'var2' trong khối bên ngoài. Vì không có biến nào có tên này trong khối bên trong, nên theo mặc định nó sẽ lấy giá trị từ khối bên ngoài, do đó in ra thông báo 'giá trị trước khối bên trong'.
- Biến 'var2' trong khối bên ngoài được gán giá trị 'giá trị sau khối bên trong'. Nhưng việc gán này diễn ra sau khi khối bên trong được định nghĩa, do đó giá trị này không tồn tại bên trong khối bên trong.
Ví dụ 2: Trong ví dụ này, chúng ta tìm sự khác biệt giữa hai số, một số được khai báo trong khối bên ngoài và một số khác trong khối bên trong. Cả hai đều có cùng tên. Hãy xem nhãn khối hữu ích như thế nào trong việc tham chiếu đến các biến này.
Ảnh chụp màn hình bên dưới hiển thị Ví dụ 2, tính toán sự khác biệt giữa các biến khối bên ngoài và bên trong có cùng tên.
<<OUTER_BLOCK>> DECLARE ln_val NUMBER :=5; BEGIN <<INNER_BLOCK>> 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; /
Code Giải thích:
- Code dòng 1: Đặt tên cho khối bên ngoài là “OUTER_BLOCK”.
- Code dòng 3: Khai báo biến 'ln_val' kiểu NUMBER với giá trị ban đầu là “5”.
- Code dòng 5: Đặt tên cho khối bên trong là “INNER_BLOCK”.
- Code dòng 7: Khai báo biến 'ln_val' trong khối bên trong là kiểu NUMBER với giá trị ban đầu là “3”.
- Code dòng 9: In ra sự khác biệt về giá trị của 'ln_val' giữa khối bên ngoài và khối bên trong. “ . Định dạng “ được sử dụng để tham chiếu đến các biến này nhằm tránh xung đột do tên biến trùng nhau.




