欢迎来到天天文库
浏览记录
ID:36012721
大小:36.50 KB
页数:4页
时间:2019-04-29
《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).调用返回
此文档下载收益归作者所有