范围和结构
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 包含 statements。statement 定义为 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
*/