调用块中声明的子程序和访问标识符的能力取决于 SPL 程序中声明的各块之间关系,本节为您介绍相关的术语。
术语
- 块是基本 SPL 结构,该结构由可选的声明部分、必需的可执行部分和可选的异常部分组成。块实现独立的存储过程和函数程序、匿名块、触发器、包、子存储过程和子函数。
- 标识符(变量、游标、类型或子程序)是块本地的,意味着它在给定块的声明部分中声明。此类本地标识符可从块的可执行部分和可选的异常部分访问。
- 父块包含另一个块(子块)的声明。
- 后代块是构成从给定父块开始的子关系的一组块。
- 祖先块是构成从给定子块开始的父关系的一组块。
- 一组后代(或祖先)块构成了层次结构。
- 层级是给定块从最高祖先块开始排列的序数。例如,给定一个独立的存储过程,则在此存储过程的声明部分中声明的子程序全都位于同一层级,例如在层级 1 调用该存储过程。该独立存储过程中声明的子程序的声明部分中的其他子程序位于下一层级,即层级 2。
- 同辈块是具有同一父块的一组块(它们都在同一块中本地声明)。同辈块位于同一层级。
示例
以下示例展示了存储过程声明部分中一组块与周围块的关系。
这些块左侧的两条垂直线指示有两对同辈块。block_1a 和 block_1b 是一对,block_2a 和 block_2b 是另一对。
每个块与其祖先的关系显示在这些块的右侧。从最低层级的子块沿着层次结构向上推移时,将形成三个分层路径。第一个路径由 block_0、block_1a、block_2a 和 block_3 组成。第二个路径由 Block_0、Block_1a 和 Block_2b 组成。第二个路径由 block_0、block_1b 和 block_2b 组成。
CREATE PROCEDURE block_0
IS
.
+---- PROCEDURE block_1a ------- Local to block_0
| IS
| . |
| . |
| . |
| +-- PROCEDURE block_2a ---- Local to block_1a and descendant
| | IS of block_0
| | . |
| | . |
| | . |
| | PROCEDURE block_3 -- Local to block_2a and descendant
| | IS of block_1a, and block_0
| Siblings . |
| | . |
| | . |
| | END block_3; |
| | END block_2a; |
| +-- PROCEDURE block_2b ---- Local to block_1a and descendant
| | IS of block_0
Siblings | , |
| | . |
| | . |
| +-- END block_2b; |
| |
| END block_1a; ---------+
+---- PROCEDURE block_1b; ------- Local to block_0
| IS
| . |
| . |
| . |
| PROCEDURE block_2b ---- Local to block_1b and descendant
| IS of block_0
| . |
| . |
| . |
| END block_2b; |
| |
+---- END block_1b; ---------+
BEGIN
.
.
.
END block_0;