↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2
历史版本。 PostgreSQL 7.2 已结束支持。 请参阅 当前版本手册.

23.2. PL/pgSQL的结构 #

PL/pgSQL是一种块结构语言。函数定义的完整文本必须是一个块。块的定义是:

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

块的语句部分中的任何语句都可以是一个子块。子块可以用于逻辑分组,或者把变量局部化到一小组语句中。

块前面的声明部分中声明的变量在每次进入该块时都会被初始化为它们的默认值,而不是每次函数调用只初始化一次。例如:

CREATE FUNCTION somefunc() RETURNS INTEGER AS '
DECLARE
   quantity INTEGER := 30;
BEGIN
   RAISE NOTICE ''Quantity here is %'',quantity;  -- Quantity here is 30
   quantity := 50;
   --
   -- Create a sub-block
   --
   DECLARE
      quantity INTEGER := 80;
   BEGIN
      RAISE NOTICE ''Quantity here is %'',quantity;  -- Quantity here is 80
   END;

   RAISE NOTICE ''Quantity here is %'',quantity;  -- Quantity here is 50

   RETURN quantity;
END;
' LANGUAGE 'plpgsql';

重要的一点是不要把PL/pgSQL中用于给语句分组的 BEGIN/END 与用于事务控制的数据库命令混淆。 PL/pgSQL的 BEGIN/END 只用于分组;它们不开始也不结束事务。函数和触发器过程总是在由外层查询建立的事务中执行——它们不能开始或提交事务,因为 PostgreSQL没有嵌套事务。

23.2.1. 词法细节

块中的每条语句和每个声明都以分号结尾。

所有关键字和标识符都可以用大小写混合的形式书写。标识符会被隐式地转换为小写,除非用双引号括起来。

PL/pgSQL中有两种注释。双横线-- 开始一个延伸到行尾的注释。/*开始一个块注释,它延伸到下一个*/出现的位置。块注释不能嵌套,但双横线注释可以被包进块注释中,而双横线也可以隐藏块注释的定界符/*和*/。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.