范围和结构

PL/vSQL 使用块范围,其中块具有以下结构:

[ <<label>> ]
[ DECLARE
    declarations ]
BEGIN
    statements
    ...
END [ label ];

声明

DECLARE 块中的变量 declarations 结构如下:

variable_name [ CONSTANT ] data_type [ NOT NULL ] [:= { expression | statement } ];

别名

别名是同一变量的备选名称。变量的别名不是副本,对任一引用的任何更改都会影响同一基础变量。

new_name ALIAS FOR variable;

在下方示例中,标识符 y 现在是变量 x 的别名,对 y 的更改反映在 x 中。

DO $$
DECLARE
    x int := 3;
    y ALIAS FOR x;
BEGIN
    y := 5; -- since y refers to x, x = 5
    RAISE INFO 'x = %, y = %', x, y;
END;
$$;

INFO 2005:  x = 5, y = 5

BEGIN 和嵌套块

BEGIN 包含 statementsstatement 定义为 PL/vSQL 的行或块。

内部块中声明的变量遮蔽外部块中声明的变量。要明确指定特定块中的变量,您可以使用 label(不区分大小写)命名块,然后使用以下语句引用该块中声明的变量:

label.variable_name

例如,由于存在遮蔽,在内部块中指定变量 x 会隐式引用 inner_block.x 而不引用 outer_block.x


<<outer_block>>
DECLARE
    x int;
BEGIN
    <<inner_block>>
    DECLARE
        x int;
    BEGIN
        x := 1000; -- implicitly specifies x in inner_block because of shadowing
        OUTER_BLOCK.x := 0; -- specifies x in outer_block; labels are case-insensitive
    END inner_block;
END outer_block;

NULL 语句

NULL 语句不起任何作用。它可以用作占位符语句,或者是一种显示代码块有意为空的方式。例如:

DO $$
BEGIN
    NULL;
END;
$$

备注

注释语法如下。您不能嵌套注释。

-- single-line comment

/* multi-line
comment
*/