• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

PL/pgSQL的结构

发布: 2007-7-04 17:55 | 作者: admin | 来源:  网友评论 | 查看: 9次 | 进入软件测试论坛讨论

领测软件测试网

PL/pgSQL是一种块结构的语言。 函数定义的所有文本都必须是一个块。 一个块用下面的方法定义:

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

    块中的每个声明和每条语句都是用一个分号终止的, 如果一个子块在另外一个块里,那么 END 后面必须有个分号,如上所述; 不过结束函数体的最后的 END 可以不要这个分号。

    所有关键字和标识符都可以用混和大小写的方式来写。标识符被隐含地转换成小写字符,除非被双引号包围。

    在 PL/pgSQL 里有两种类型地注释。一个双破折号(--) 引出一个扩展到该行结尾的注释。一个 /* 引出一个块注释,一直扩展到下一次 */ 的出现。 块注释不能嵌套,但是双破折号注释可以包围在块注释里面,并且双破折号可以隐藏一个块注释分隔符 /* 和 */。

    在一个块的语句段里的任何语句都可以是一个子块。 子块可以用于逻辑分组或者把变量局部化为作用于一个比较小的语句组。

    在语句块前面的声明段(declarations section)里定义的变量在每次进入语句块时都初始化为它们的缺省值, 而不是每次函数调用时初始化一次。比如:

CREATE FUNCTION somefunc() RETURNS integer AS $$
DECLARE
   quantity integer := 30;
BEGIN
   RAISE NOTICE 'Quantity here is %', quantity;  -- 在这里的数量是 30
   quantity := 50;
   --
   -- 创建一个子块
   --
   DECLARE
      quantity integer := 80;
   BEGIN
      RAISE NOTICE 'Quantity here is %', quantity;  -- 在这里的数量是 80
   END;

   RAISE NOTICE 'Quantity here is %', quantity;  -- 在这里的数量是 50

   RETURN quantity;
END;
$$ LANGUAGE plpgsql;

    我们一定不要把PL/pgSQL里用于语句分组的 BEGIN/END 和用于事务控制的数据库命令搞混了。 PL/pgSQL的 BEGIN/END 只是用于分组(译注∶象 C 里的 {}); 它们不会开始和结束一个事务。 函数和触发器过程总是在一个由外层命令建立起来的事务里执行 — 它们无法开始或者提交事务,因为 PostgreSQL 没有嵌套事务。 不过,一个包含 EXCEPTION 子句的块实际上形成一个子事务,它可以在不影响外层事务的情况下回滚。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网