CREATE FUNCTION
CREATE FUNCTION — 定义一个新函数
大纲
CREATE FUNCTIONname( [ftype[, ...] ] ) RETURNSrtypeASpathLANGUAGE 'langname'
输入
-
name 要创建的函数的名称。
-
ftype 函数参数的数据类型。
-
rtype 返回数据类型。
-
path 可以是一个 SQL 查询,也可以是一个对象文件的绝对路径。
-
langname 可以是 '
C'、'sql'、'internal' 或 'plname',其中 'plname' 是一种已创建过程语言的名称。详见CREATE LANGUAGE。
输出
- →
CREATE 如果命令成功完成,就返回这个结果。
描述
CREATE FUNCTION允许一个
Postgres用户向一个数据库注册一个函数。随后,这个用户被视为该函数的拥有者。
注意
关于编写函数的更多信息,请参考 PostgreSQL Programmer's Guide 中关于函数的章节。
使用DROP FUNCTION
删除用户定义的函数。
用法
创建一个简单的 SQL 函数:
CREATE FUNCTION one() RETURNS int4
AS 'SELECT 1 AS RESULT'
LANGUAGE 'sql';
SELECT one() AS answer;
answer
------
1
创建一个 C 函数,调用一个用户创建的共享库中的例程。这个特定的例程计算一个校验位,如果函数参数中的校验位正确就返回 TRUE。它用于 CHECK 约束中。
CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool
AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c';
CREATE TABLE product
(
id char(8) PRIMARY KEY,
eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
REFERENCES brandname(ean_prefix),
eancode char(6) CHECK (eancode ~ '[0-9]{6}'),
CONSTRAINT ean CHECK (ean_checkdigit(eanprefix, eancode))
);
缺陷
C 函数不能返回一组值。
兼容性
CREATE FUNCTION是
Postgres语言扩展。
SQL/PSM
注意
PSM 表示持久存储模块(Persistent Stored Modules)。它是一种过程语言,最初希望在 1996 年底之前 PSM 能被批准为官方标准。截至 1998 年中,这还没有发生,但希望 PSM 最终能成为一个标准。
SQL/PSM CREATE FUNCTION的语法如下:
CREATE FUNCTIONname( [ [ IN | OUT | INOUT ]parmtype[, ...] ] ) RETURNSrtypeLANGUAGE 'langname' ESPECIFICroutineSQL-statement