1。基本概念:
SQL
函数可以包含任意数量的
查询,但
功能仅返回最后查询的结果(必须选择)。在简单的
情况下,返回的最后一个查询结果的第一行,如果最后一个查询不返回任何行,则返回空值。如果这个功能要求返回的所有行的最后一个SELECT语句,函数的返回值可以被定义为一个集合,即集合
类型。
的SQL函数函数体应列出SQL语句以分号隔开,和分号后的最后一个语句是可选的。除非函数被声明为返回void,最后声明必须选择。事实上,在SQL的功能,它不仅可以包含SELECT查询语句,但其他标准的SQL语句,如插入、更新和
删除,但是事情相关的语句不能包含在内,如开始、提交、回滚和
保存点。
创建函数
命令的语法要求函数的正文被写成字符串
文本。一般来说,完全使用美元符号($ $)的文本字符串常量,如:
复制代码代码如下所示:
创建函数(返回)clean_emp无效$
从工资低于0的EMP中删除;
$ sql
语言;
解释的最后一件事是在SQL函数的
参数,和PostgreSQL定义1美元的第一个参数,以及2美元的第二参数等。如果该参数是一个复合型的,你可以使用点表示法,即1.name美元进入复合类型参数的名称领域。需要注意的是,函数的参数只能作为数据值不能用于标识重要的,如:
复制代码代码如下所示:
插入表值(1美元);法律
插入1美元的值(42);非法性(表名属于标识符中的一个)
两。基本类型:
最简单的SQL函数可能是一个没有参数并返回到基本类型的函数,如:
复制代码代码如下所示:
创建函数一(返回)整数为$
选择1作为结果;
$ sql语言;
下面的示例将基本类型声明为函数的参数。
复制代码代码如下所示:
创建功能add_em(整数,整数)返回整数为$
选择1美元+ 2美元;
$ sql语言;
#通过选择函数调用。
Postgres = #选择add_em(1,2)作为答案;
回答
。
三
(1行)
在下面的示例中,函数体包含多个以分号分隔的SQL语句。
复制代码代码如下所示:
创建函数TF1(整数,数字)返回数值为美元
更新银行余额2美元,资产1美元accountno = =;
选择平衡银行accountno = 1美元;
$ sql语言;
三。复合型:
请看下面的例子:
1)。创建一个数据表,以便生成与之对应的复合类型。
复制代码代码如下所示:
创建表EMP(
名称文本,
薪酬数字,
年龄的整数,
);
2)。创建一个函数的参数是复杂的类型。在一个函数中,你可以是一个复合型,为1美元,为基本型参数
参考。获得复合型字段使用点的表达,如1.salary美元。
复制代码代码如下所示:
创建功能double_salary(EMP)返回整数为$
选择($ 1.salary×2):整数工资;
$ sql语言;
3)。在SELECT语句中,可以使用EMP来表示EMP表的一整行数据。
复制代码代码如下所示:
选择的名字,double_salary(EMP。*)从EMP年龄> 30梦;
4)。我们还可以使用行表达式来构造定制的复杂类型,例如:
复制代码代码如下所示:
选择的
名字,double_salary(行(姓名、工资×1.1、年龄))为梦想从EMP;
5)。创建一个返回值为复合类型的函数,例如:
复制代码代码如下所示:
创建函数(返回)new_emp EMP为$
选择行(不关',1000, 25)::电磁脉冲;
$ sql语言;
6)。复合型函数的调用。
复制代码代码如下所示:
选择new_emp();
7)。调用一个返回复合类型的函数,同时访问返回值的字段。
复制代码代码如下所示:
选择(new_emp(名字));
四。带输出参数的函数:
另一种
方法可以用来返回函数
执行的结果,即输出参数,例如:
复制代码代码如下所示:
创建功能add_em2(X Y int,int,int作为了和美元)
选择1美元+ 2美元
$ sql语言;
调用方法的返回结果是完全一样的add_em(有返回值的函数),如:
复制代码代码如下所示:
选择add_em(3,7);
这个函数的输出参数是不是从以前的add_em函数本质上是不同的。事实上,其输出参数的真正价值在于,它提供了函数返回多个领域等方式,
复制代码代码如下所示:
创建函数(X Y sum_n_product int,int,int,int了笔,产品为$)
选择1美元+ 2美元,1美元* 2美元
$ sql语言;
调用方法不改变,只返回结果列表。
复制代码代码如下所示:
SELECT * FROM sum_n_product(约);
和产品|
----- + ---------
53 | 462
(1行)
在上面的例子中,用于表示函数参数是一个
输入参数(
默认值是可以忽略的),输出表明参数是一个输出参数。
五。将结果作为表数据源返回:
所有的SQL函数可用于在查询的FROM子句。这种方法是特别有用的函数返回一个复合型的,如果函数定义为一个基本类型的返回,然后函数生成一个单一的字段的表,如果该函数被定义为一个复杂的返回类型,则函数生成一个
属性对于每一个复合型。看下面的例子:
1)。创建数据表。
复制代码代码如下所示:
创建表
fooid int,
Foosubid int,
fooname文本
);
2)。创建一个SQL函数,它的返回值是与富表相对应的复合类型。
复制代码代码如下所示:
创建函数会返回foo(int)为$
SELECT * FROM foo,fooid = 1美元;
$ sql语言;
3)。该函数在from子句中被调用。
复制代码代码如下所示:
SELECT *,上(fooname)从getFoo(1)T1;
六,返回集合的SQL函数:
如果SQL函数的返回值类型集合,然后在函数被调用的时候,最后的选择查询的所有数据将被退回。该功能通常是用来称呼在FROM子句中的函数,如下面的例子:
创建函数getFoo(int)返回套foo为$
SELECT * FROM foo,fooid = 1美元;
$ sql语言;
在FROM子句中,一个函数,返回一个集合,称为复杂类型,其结果是相当于:select * from(select * from foo,fooid = 1)T1;
SELECT * FROM getFoo(1)T1;
七。多态sql函数:
SQL函数可以声明为参数接受多态类型(任何和anyarray)或返回一个多态类型的返回值,如下面的示例所示:
1)。函数参数和返回值
都是多态类型。
复制代码代码如下所示:
创建功能make_array(任何、任何的回报anyarray为美元)
选择数组{ $ 1,$ 2 };
$ sql语言;
调用的方式与调用其他类型的SQL函数完全相同。只有在传递字符串类型参数时,才需要显式地
转换为
目标类型,否则将被视为未知类型,例如:
复制代码代码如下所示:
选择make_array(1, 2)作为参数,make_array(A:文本,B)为TextArray;
2)。函数的参数是多态的,返回值是基本类型。
复制代码代码如下所示:
创建功能is_greater(任何、任何)返回布尔值为$
选择1美元> 2美元;
$ sql语言;
3)。多态类型用于函数的输出参数。
复制代码代码如下所示:
创建函数dup(F1 F2任何任何,出了anyarray,F3为$)
选择$ 1,数组{ $ 1,$ 1 }
$ sql语言;
八。函数重载:
多个函数可以定义为相同的函数名,但是必须区分它们的参数。换句话说,函数名可以重载,这个规则类似于面向对象语言中的函数重载,如下面的示例所示:
复制代码代码如下所示:
创建函数测试(int,真)返回…
创建功能测试(smallint双)返回…
因为在PostgreSQL
支持重载,参数列表也必须指定当函数被删除,如:
复制代码代码如下所示:
删除功能测试(int,实数);
降功能测试(smallint双);