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