参考:

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

摘记:

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

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

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

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

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

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

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

最后,PL/pgSQL 函数可以声明为返回void,如果它没什么有用的值可以返回的话。

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 行记录)

PostgreSQL-PL/pgSQL的更多相关文章

  1. postgresql PL/pgSQL—存储过程结构和变量声明

    ref: https://www.postgresql.org/docs/9.6/static/plpgsql-structure.html 一. 函数结构 CREATE FUNCTION somef ...

  2. PostgreSQL存储过程(2)-基于PL/PgSQL的存储过程

    介绍 PL/pgSQL 是PostgreSQL 数据库系统的一个可加载的过程语言. PL/pgSQL 的设计目标是创建一种可加载的过程语言,可以 用于创建函数和触发器过程, 为SQL 语言增加控制结构 ...

  3. 用PL/pgSQL写postgreSQL的存储过程[转]

    http://blog.chinaunix.net/uid-7591044-id-1742967.html 今天学会了用 PL/pgSQL 写 postgreSQL 的存储过程,网上资料实在少得可怜, ...

  4. PL/pgSQL学习笔记之八

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 另外一种声明 PL/pgSQL 函数的方法是使用 returns ...

  5. PL/pgSQL学习笔记之七

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 如果一个PL/pgSQL函数声明了输出参数,输出参数被赋予$n名 ...

  6. PL/pgSQL学习笔记之五

    http://www.postgresql.org/docs/9.1/static/plpgsql-declarations.html 39.3. 声明 块中使用的所有的变量必须在块的声明节中进行声明 ...

  7. PL/pgSQL学习笔记之四

    http://www.postgresql.org/docs/9.1/static/plpgsql-structure.html 39.2. PL/pgSQL 的结构 PL/pgSQL是一种块式结构的 ...

  8. PL/pgSQL学习笔记之三

    http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1.2. Supported Argument and Resul ...

  9. PL/pgSQL学习笔记之二

    39.1.1 使用 PL/pgSQL的好处 SQL是 PostgreSQL和其他大多数关系型数据库作为查询语言而使用的语言.它可移植,并容易学习.但是SQL语句必须被数据库服务器逐条地执行. 这意味着 ...

  10. PL/pgSQL学习笔记之一

    开始 资料来源:http://www.postgresql.org/docs/9.1/static/plpgsql-overview.html 39.1 概要: PL/pgSQL是一种可载入的过程语言 ...

随机推荐

  1. (九)WebGIS中的矢量查询(针对AGS和GeoServer)

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.前言 在第七章里我们知道了WebGIS中要素的本质是UICompo ...

  2. solr教程

    转载请注明出处:http://www.cnblogs.com/zhuxiaojie/p/5764680.html 本教程基于solr5.5 前言 至于为什么要用solr5.5,因为最新的6.10,没有 ...

  3. 【十大经典数据挖掘算法】Apriori

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 关联分析 关联分析是一类非常有 ...

  4. jQuery获取及设置单选框、多选框、文本框内容

    获取一组radio被选中项的值 var item = $('input[@name=items][@checked]').val(); 获取select被选中项的文本 var item = $(&qu ...

  5. 浅谈Slick(1)- 基本功能描述

    Slick (Scala language-integrated connection kit)是scala的一个FRM(Functional Relational Mapper),即函数式的关系数据 ...

  6. [moka同学笔记]Linux命令基本格式及目录处理命令

    命令提示符 [root@localhost ~]# root:当前登录用户localhost:主机名~:当前所在的目录,此处为"家"目录#:root超级用户的提示符,如果是普通用户 ...

  7. python基础之文件处理

    读和写文件 读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直 ...

  8. ABP 初探 之 AbpSession 扩展

    Abp的权限管理是基于 Identity,所有的扩展也是基于 claims .claims 有许多默认属性,具体连接 关于 Identity的详细介绍,可以参考园友博客 继承 Microsoft.As ...

  9. 第二十六章 hystrix-dashboard + turbine

    一.使用turbine的意义 引入多个hystrix stream: 1.使用hystrix-dashboard的可以添加多个stream的功能 图中添加的两个stream会在真正monitor的时候 ...

  10. 设计模式学习之路——Decorator装饰模式(结构模式)

    子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能:比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等. 动机 ...