PostgreSQL-PL/pgSQL

参考:mysql

https://wiki.postgresql.org/wiki/9.1%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B9%9D%E7%AB%A0sql

摘记:数据库

PL/pgSQL是 PostgreSQL 数据库系统的一个可装载的过程语言。数组

在PL/pgSQL中你能够把一块运算和一系列命令在数据库服务器里面组成一个块,所以这样就拥有了过程语言的力量而且简化 SQL 的使用,而且能大量节约客户端/服务器通信之间的开销。服务器

客户端和服务端之间额外的传输将被取消.
客户端不须要也不用客户端和服务端之间进行封装或者传输的中间结果。
能够避免命令的多轮解析

在PL/pgSQL中编写的函数能够用服务器支持的任何标量参数或者数组类型,而且他们能够返回这些类型的任何结果。它们也能接受或者返回任何 声明的复合类型(行类型)。声明一个PL/pgSQL函数返回record函数,这意味这这个结果是一个行类型,这个行的字段是在调用它的查询中指定的。函数

PL/pgSQL函数可以用VARIADIC标志声明一个可变的数字参数。这个方法实际和SQL的函数是用的方法是同样的。post

PL/pgSQL函数也能够声明并接受返回多态的类型anyelement, anyarray, anynonarray, 和anyenum。一个多态的函数实际操做的数据类型能够在不一样的调用环境中变化。spa

PL/pgSQL函数也能声明并返回单个实例的任意一个数据类型集(或者表)。这样的函数经过为结果集每一个须要返回的元素执行一个RETURN NEXT生成它的输出,或者用RETURN QUERY的输出来评估一个查询的结果。postgresql

最后,PL/pgSQL 函数能够声明为返回void,若是它没什么有用的值能够返回的话。code

PL/pgSQL函数也可以用输出的参数来进行声明并代替一个明确的返回类型。这不会为这个语言添加任何基本的功能,可是这样经常是很方便的,特别是返回多个值的时候。这个RETURNS TABLE表示法也能用RETURNS SETOF进行替换。

 


 

我以为虽然plpgsql是过程语言,可是pg中所编写的过程基本上都属于函数,由于关键字create function 和 returns 是固定的,而mysql中能够分开create 存储过程procedure 和函数function 两类,function 都是要明确返回类型的,那再在从上述PL/pgSQL 函数能够声明为返回void能够看出plpgsql 同样能够“模仿”完成procedure的功能扮演,是异曲同工的,只是pg上更增强调这是一种语言:PL/pgSQL,而mysql只是单纯的具有了可编写存储过程和函数这两种功能。

 

 

 

 

yun=> \dL
                         语言列表
  名称   |  拥有者  | 信任 |             描述             
---------+----------+------+------------------------------
 plpgsql | postgres | t    | PL/pgSQL procedural language
(1 行记录)
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息