PostgreSQL教程(十九):SQL语言功能

PostgreSQL教程(十九):SQL语言功能
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双);
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部