pgstgresql支持4种函数,分别是用户自定义函数:查询语言、过程语言、C语言和内部语言。每一种都可以传入和返回基础和复杂类型。注意在PostgreSQL中CREATE FUNCTION命令不仅可以创建函数也可以创建存储过程。
查询语言(SQL)函数
任何SQL命令集合都可以打包在一起,定义成新的函数。 除了SELECT查询之外,命令可以包含修改数据的查询 (INSERT, UPDATE和DELETE)以及其它 SQL命令。(你不能使用事务控制命令,比如COMMIT, SAVEPOINT和 一些实用命令)。
不过,最后一条命令必须是一个SELECT语句, 或者有RETURNING子句返回函数的返回类型。另外, 如果你只想定义一连串动作而无需返回任何数值,可以定义返回void。
- Arguments for SQL Functions
在函数体中使用名称或数字引用SQL函数的参数
PL/pgSQL - SQL过程语言
使用PL/pgSQL的优点
SQL是PostgreSQL和大多数其它关系型数据库的命令语言。 它是可移植的,并且容易学习使用。但是所有SQL语句都必须由数据库服务器独立地执行。
这就意味着你的客户端应用必须把每条命令发送到数据库服务器, 等待它处理这个命令,接收结果,对结果进行一些处理, 然后再给服务器发送另外一条命令。 所有这些东西都会产生进程间通讯, 并且如果你的客户端在另外一台机器上甚至还会产生网络开销。
通过PL/pgSQL,可以把运算块和一系列命令在数据库服务器内部组成一个块, 这样就拥有了过程语言的能力并且简化 SQL 的使用, 因而节约了大量的时间,因为不需要进行客户端/服务器通讯