postgresql学习手册(sql语言函数)

postgresql学习手册(sql语言函数)

ID:36012721

大小:36.50 KB

页数:4页

时间:2019-04-29

postgresql学习手册(sql语言函数) _第1页
postgresql学习手册(sql语言函数) _第2页
postgresql学习手册(sql语言函数) _第3页
postgresql学习手册(sql语言函数) _第4页
资源描述:

《postgresql学习手册(sql语言函数) 》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、基本概念:   SQL函数可以包含任意数量的查询,但是函数只返回最后一个查询(必须是SELECT)的结果。在简单情况下,返回最后一条查询结果的第一行。如果最后一个查询不返回任何行,那么该函数将返回NULL值。如果需要该函数返回最后一条SELECT语句的所有行,可以将函数的返回值定义为集合,即SETOFsometype。   SQL函数的函数体应该是用分号分隔的SQL语句列表,其中最后一条语句之后的分号是可选的。除非函数声明为返回void,否则最后一条语句必须是SELECT。事实上,在SQL函数中,不仅可以包含SELECT查询语句,也可以包含INSERT、U

2、PDATE和DELETE等其他标准的SQL语句,但是和事物相关的语句不能包含其中,如BEGIN、COMMIT、ROLLBACK和SAVEPOINT等。   CREATEFUNCTION命令的语法要求函数体写成一个字符串文本。通常来说,该文本字符串常量使用美元符($$)围住,如:   CREATEFUNCTIONclean_emp()RETURNSvoidAS$$      DELETEFROMempWHEREsalary<0;   $$LANGUAGESQL;   最后需要说明的是SQL函数中的参数,PostgreSQL定义$1表示第一个参数,$2为第二个参数

3、并以此类推。如果参数是复合类型,http://qianming.wan128.cn则可以使用点表示法,即$1.name访问复合类型参数中的name字段。需要注意的是函数参数只能用作数据值,而不能用于标识符,如:   INSERTINTOmytableVALUES($1);  --合法   INSERTINTO$1VALUES(42);         --不合法(表名属于标示符之一)   二、基本类型:      最简单的SQL函数可能就是没有参数且返回基本类型的函数了,如:   CREATEFUNCTIONone()RETURNSintegerAS$$   

4、   SELECT1ASresult;   $$LANGUAGESQL;   下面的例子声明了基本类型作为函数的参数。   CREATEFUNCTIONadd_em(integer,integer)RETURNSintegerAS$$      SELECT$1+$2;   $$LANGUAGESQL;   #通过select调用函数。   postgres=#SELECTadd_em(1,2)ASanswer;   answer   --------        3   (1row)         在下面的例子中,函数体内包含多个SQL语句,它们之间是用

5、分号进行分隔的。   CREATEFUNCTIONtf1(integer,numeric)RETURNSnumericAS$$      UPDATEbankSETbalance=balance-$2WHEREaccountno=$1;      SELECTbalanceFROMbankWHEREaccountno=$1;   $$LANGUAGESQL;   三、复合类型:   见如下示例:   1).创建数据表,这样与之对应的复合类型也随之生成。   CREATETABLEemp(      name       text,      salary   

6、  numeric,      age        integer,   );   2).创建函数,其参数为复合类型。在函数体内,可以像引用基本类型参数那样引用复合类型,如$1。访问复合类型的字段使用点表达式即可,如:$1.salary。   CREATEFUNCTIONdouble_salary(emp)RETURNSintegerAS$$      SELECT($1.salary*2)::integerASsalary;   $$LANGUAGESQL;   3).在select语句中,可以使用emp.*表示emp表的一整行数据。   SELECTna

7、me,double_salary(emp.*)ASdreamFROMempWHEREage>30;   4).我们也可以使用ROW表达式构造自定义的复合类型,如:   SELECTname,double_salary(ROW(name,salary*1.1,age))ASdreamFROMemp;   5).创建一个函数,http://name.ttplay8.cn其返回值为复合类型,如:   CREATEFUNCTIONnew_emp()RETURNSempAS$$      SELECTROW('None',1000.0,25)::emp;   $$LAN

8、GUAGESQL;   6).调用返回

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。