参考:

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. JS Div滚动,下拉框添加属性,年月日下拉条

    创建某一下拉菜单的项: str = str+"<option value='"+i+"'>"+i+"</option>&quo ...

  2. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

    为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...

  3. 【T-SQL】分布抽取部分数据

    好吧,我确实不知道该怎么起这个标题,整了一个“分布”,感觉还有点高档,其实没啥技术含量,看完你就知道了.情况是这样,刚刚接到一个临时任务,需要让几个营业点的销售数据[变]少一点,就是在ERP的相关报表 ...

  4. [译]Godot系列教程三 - 场景实例化(续)

    场景实例化(续) 要点 场景实例化带来很多便利的用法,总体来说有: 将场景细分,更便于管理 相对于某些引擎中的Prefab组件更灵活,并且在许多方面更强大 是一种设计更复杂的游戏流程甚至UI的方式 这 ...

  5. yii的入口文件index.php中为什么会有这两句

    yii的应用模板中,index.php中 前面会有这两句 <?php // comment out the following two lines when deployed to produc ...

  6. wParam和lParam两个参数到底是什么意思?

    在Windows的消息函数中,有两个非常熟悉的参数:wParam,lParam. 这两个参数的字面意义对于现在的程序来说已经不重要了,因为它是16位系统的产物,为了保持程序的可移植性,就将它保存了下来 ...

  7. 【夯实Mysql基础】记一次mysql语句的优化过程

    1. [事件起因] 今天在做项目的时候,发现提供给客户端的接口时间很慢,达到了2秒多,我第一时间,抓了接口,看了运行的sql,发现就是 2个sql慢,分别占了1秒多. 一个sql是 链接了5个表同时使 ...

  8. ASP.NET Redis 开发

    文件并发(日志处理)--队列--Redis+Log4Net Redis简介 Redis是一个开源的,使用C语言编写,面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高 ...

  9. Apache Lucene(全文检索引擎)—搜索

    目录 返回目录:http://www.cnblogs.com/hanyinglong/p/5464604.html 本项目Demo已上传GitHub,欢迎大家fork下载学习:https://gith ...

  10. Jquery实现的简单轮播效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...