PL/pgSQL学习笔记之四
http://www.postgresql.org/docs/9.1/static/plpgsql-structure.html
39.2. PL/pgSQL 的结构
PL/pgSQL是一种块式结构的语言。完整的函数定义必须是一个块。一个块的定义形式如下:
[ <<label>> ]
[ DECLARE
declarations ]
BEGIN
statements
END [ label ];
在块中,每一个声明或语句都以分号结束。一个块出现在另外一个块中的时候,必须接 END;形式,如上图所示。但是包含函数体的最后一个END后,可以不接分号。
注意:在BEGIN后不要接分号。
当你需要在EXIT语句中使用一个块时,你才需要使用 label,或者当你需要通过块名称来把此块内的变量和其他同名变量进行区分时,你需要使用label。如果在 END 后使用了 label,它必须和该块开始时的label相一致。
所有的关键字都是大小写不敏感的。变量定义会被转换为小写字母,除非使用了双引号,这和普通SQL命令中的作法一样。
注释在PL/pgSQL中的作用方式和在普通SQL中的相同。双线开始一个注释知道此行末尾。一个以/*开始的标志表示一段注释,直到遇到 */。块注释是可嵌套的。
在块中的语句章节部分,任何语句都可以是一个子块。子块可以用于逻辑分组或者在小的语句组中使用本地变量定义。在子块中声明的变量,覆盖任何外部块中的同名变量;但是你可以通过给出块名的方式来访问子块外部变量。例如:
CREATE FUNCTION somefunc() RETURNS integer AS $$
<< outerblock >>
DECLARE
quantity integer := 30;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity; -- Prints 30
quantity := 50;
--
-- Create a subblock
--
DECLARE
quantity integer := 80;
BEGIN
RAISE NOTICE 'Quantity here is %', quantity; -- Prints 80
RAISE NOTICE 'Outer quantity here is %', outerblock.quantity; -- Prints 50
END; RAISE NOTICE 'Quantity here is %', quantity; -- Prints 50 RETURN quantity;
END;
$$ LANGUAGE plpgsql;
注意: 在PL/pgSQL函数体外围,有一个隐藏的”outer block”。此处可提供对函数参数的声明,也包括一些特殊的变量如FOUND。此外围块用函数名来标识,意味着这些个参数和特殊变量可以通过函数名来制定访问路径。
有一点很重要,请不要把PL/pgSQL中的未来分割语句而使用的BEGIN/END和 SQL命令中用于事务控制的 同名指令搞混了。PL/pgSQL的 BEGIN/END 仅仅是用于分割;它们并不能开始或停止一个事务。 函数或者触发器过程总是在一个事务的内部得到执行,这个事务由外部查询发起— 函数或触发器过程不能启动或者提交一个事务,因为没有供它们执行的上下文。但是,一个包含EXCEPTION 的块可以形成一个子事务,此子事务能够回滚而不影响外部事务。
PL/pgSQL学习笔记之四的更多相关文章
- PL/pgSQL学习笔记之二
39.1.1 使用 PL/pgSQL的好处 SQL是 PostgreSQL和其他大多数关系型数据库作为查询语言而使用的语言.它可移植,并容易学习.但是SQL语句必须被数据库服务器逐条地执行. 这意味着 ...
- PL/pgSQL学习笔记之八
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 另外一种声明 PL/pgSQL 函数的方法是使用 returns ...
- PL/pgSQL学习笔记之七
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 如果一个PL/pgSQL函数声明了输出参数,输出参数被赋予$n名 ...
- PL/pgSQL学习笔记之五
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3. 声明 块中使用的所有的变量必须在块的声明节中进行声明 ...
- PL/pgSQL学习笔记之三
http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1.2. Supported Argument and Resul ...
- PL/pgSQL学习笔记之一
开始 资料来源:http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1 概要: PL/pgSQL是一种可载入的过程语言 ...
- PL/pgSQL学习笔记之十一
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.4. Row 类型 name table_name%R ...
- PL/pgSQL学习笔记之十
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.3. 类型拷贝 variable%TYPE %TYPE ...
- PL/pgSQL学习笔记之九
http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3.2. ALIAS newname ALIAS FOR ...
随机推荐
- Java把长整型时间转成字符串日期
数据库里存放的是timestamp格式,前端取得后是这种:1436255550710长整型时间截转换成"2015-07-07"这种格式呢? import java.io.IOExc ...
- Cannot run program "/home/mohemi/Program/adt-bundle-linux-x86_64-20130729/sdk//tools/emulator": error=2, 没有那个文件或目录
在64位的Ubuntu下,安装ADT64位的,打开android模拟器出现以下报错: Starting emulator for AVD 'Android' Failed to start emula ...
- dos攻击
概念理解 DoS到底是什么?接触PC机较早的同志会直接想到微软磁盘操作系统的DOS--DiskOperationSystem?不,此DoS非彼DOS也,DoS即DenialOfService,拒绝服务 ...
- 转载:50个C/C++源代码网站
来源:http://www.cnblogs.com/feisky/archive/2010/03/05/1679160.html C/C++是最主要的编程语言.这里列出了50名优秀网站和网页清单,这些 ...
- js画线
<body> <div id="main"> </div> <div id="fd" style="filt ...
- Introduction 引言
The risk of software failure has never been greater. The estimated annual economic impact ranges fro ...
- ipv4头部分析,读书笔记3
ip头部最长是60字节,前面的20字节是固定的,选项可加上40字节 4位版本号--- 对于ipv4来说呢,就是4 4位头部长度 --- 表示 有多小个32bit(4字节),4位最大表示数是15啦,也 ...
- 装饰模式decorator
C++设计模式——装饰模式 前言 在实际开发时,你有没有碰到过这种问题:开发一个类,封装了一个对象的核心操作,而这些操作就是客户使用该类时都会去调用的操作:而有一些非核心的操作,可能会使用,也可能不会 ...
- strcpy基本用法
C语言标准库函数strcpy,把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间. C语言函数 原型声明:extern char *strcpy(char* dest, co ...
- the NTP socket is in use, exiting
centos下使用如下命令手动同步服务器时间 ntpdate ntp.fudan.edu.cn 或 ntpdate ntp.api.bz 出现“the NTP socket is in use, ex ...