すべてのプロダクト
Search
ドキュメントセンター

PolarDB:ブロック関係

最終更新日:May 30, 2024

ブロック間の関係は、構造化プログラミング言語 (SPL) プログラムで宣言することができる。 この関係は、ブロック内で宣言されるサブプログラムおよびアクセス識別子を呼び出す能力を決定する。 このトピックでは、ブロック関係に関連する用語を紹介します。

用語

  • ブロックは基本的なSPL構造である。 これは、オプションの宣言セクション、必須の実行可能セクション、およびオプションの例外セクションで構成されます。 ブロックは、スタンドアロンのプロシージャと関数プログラム、匿名ブロック、トリガー、パッケージ、サブプロシージャ、およびサブ関数を実装します。
  • 識別子は、変数、カーソル、型、サブプログラムなど、SPLプログラムの要素に割り当てられる名前です。 識別子がブロックに対してローカルである場合、識別子は、所与のブロックの宣言トピック内で宣言される。 そのようなローカル識別子は、ブロックの実行可能セクションおよびオプションの例外セクションからアクセス可能である。
  • 親ブロックは、子ブロックの宣言を含む。
  • 子孫ブロックは、所与の親ブロックから始まる子関係を形成するブロックのセットである。
  • 祖先ブロックは、所与の子ブロックから始まる親関係を形成するブロックのセットである。
  • 階層は、子孫ブロックまたは祖先ブロックのセットで構成されます。
  • レベルは、最高の祖先ブロックからの所与のブロックの序数である。 スタンドアロンプロシージャの場合、このプロシージャの宣言トピック内で宣言されているサブプログラムはすべて同じレベルにあります。 このプロシージャをレベル1で呼び出すと、スタンドアロンプロシージャで宣言されたサブプログラムの宣言トピック内の追加のサブプログラムが次のレベルであるレベル2になります。
  • 兄弟ブロックは、同じ親ブロックを有するブロックのセットである。 これは、兄弟ブロックのすべてが同じブロック内でローカルに宣言されていることを示します。 兄弟ブロックは同じレベルにあります。

次の例は、プロシージャ宣言セクション内のブロックのセットと、その周囲のブロックとの関係を示しています。

ブロックの左側の2つの垂直線は、兄弟ブロックの2つのペアが存在することを示しています。 block_1aとblock_1bは一方のペアであり、block_2aとblock_2bは他方のペアである。

各ブロックとその祖先との関係は、ブロックの右側に示されている。 プログラムが最下位レベルの子ブロックから階層を上に進むと、3つの階層パスが形成される。 第1のパスは、block_0、block_1a、block_2a、およびblock_3からなる。 第2のパスは、block_0、block_1a、およびblock_2bからなる。 第3のパスは、block_0、block_1b、およびblock_2bからなる。

CREATE PROCEDURE block_0
IS
        .
    + ---- PROCEDURE block_1a ------- block_0にローカル
    | IS
    |         .                          |
    |         .                          |
    |         .                          |
    | + -- PROCEDURE block_2a ---- block_1aと子孫にローカル
    | | block_0のIS
    |     |       .                      |
    |     |       .                      |
    |     |       .                      |
    | | PROCEDURE block_3 -- block_2aと子孫にローカル
    | | block_1aおよびblock_0のIS
    | 兄弟。                  |
    |     |           .                  |
    |     |           .                  |
    | | END block_3; |
    | | END block_2a; |
    | + -- PROCEDURE block_2b ---- block_1aと子孫にローカル
    | | block_0のIS
 兄弟 | , |
    |     |       .                      |
    |     |       .                      |
    | + -- END block_2b; |
    |                                    |
    | END block_1a; --------- +
    + ---- PROCEDURE block_1b; ------- block_0にローカル
    | IS
    |         .                          |
    |         .                          |
    |         .                          |
    | PROCEDURE block_2b ---- block_1bと子孫にローカル
    | block_0のIS
    |             .                      |
    |             .                      |
    |             .                      |
    | END block_2b; |
    |                                    |
    + ---- END block_1b; ---------
開始
      .
      .
      .
END block_0;