PL/pgSQL是一种块结构语言,函数定义的所有文本都必须在一个块内,其中块中的每个声明和每条语句 都是以分号结束,如果某一子块在另外一个块内,那么该子块的END关键字后面必须以分号结束,不过 对于函数体的最后一个END关键字,分号可以省略,如:
[ <<label>> ]
[ DECLARE declarations ] BEGIN statements END [ label ];
在PL/pgSQL中有两种注释类型,双破折号(--)表示单行注释。/ /表示多行注释,该注释类型的规则等 同于C语言中的多行注释。 在语句块前面的声明段中定义的变量在每次进入语句块(BEGIN)时都会将声明的变量初始化为它们的缺省 值,而不是每次函数调用时初始化一次。如:
CREATE FUNCTION populate() RETURNS integer AS $$
DECLARE
-- 声明段 BEGIN
PERFORM my_function(); END; $$ LANGUAGE plpgsql;
CREATE FUNCTION somefunc() RETURNS integer AS $$
DECLARE quantity integer := 30; BEGIN
三、声明:
所有在块里使用的变量都必须在块的声明段里先进行声明,唯一的例外是FOR循环里的循环计数变量, 该变量被自动声明为整型。变量声明的语法如下:
variable_name [ CONSTANT ] variable_type [ NOT NULL ] [ { DEFAULT | := } expression ];
RAISE NOTICE 'Quantity here is %', quantity; quantity := 50;
-- 创建一个子块
-- DECLARE
quantity integer := 80;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity;
END; RAISE NOTICE 'Quantity here is %', quantity; RETURN quantity; END; $$ LANGUAGE plpgsql; #执行该函数以进一步观察其执行的结果。 postgres=# select somefunc(); NOTICE: Quantity here is 30 NOTICE: Quantity here is 80 NOTICE: Quantity here is 50
somefunc
50 (1 row)
--在这里的数量是30