大型数据库技术第11章用户自定义函数课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《大型数据库技术第11章用户自定义函数课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大型 数据库技术 11 用户 自定义 函数 课件
- 资源描述:
-
1、第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005第第11章章 用户自定义函数设计用户自定义函数设计 11.1 用户自定义函数概述用户自定义函数概述 11.2 创建用户定义函数创建用户定义函数 11.3 用户定义函数的调用用户定义函数的调用 11.4 修改和删除用户定义函数修改和删除用户定义函数 11.5 用户定义函数实例分析用户定义函数实例分析 11/10/20221第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 200511.1 用户自定义函数概述用户自定义函数概述 11.1.1用户自定义函数的特点用户自
2、定义函数的特点1 1、重复使用编程代码,减少编程开发时间,提高工作效、重复使用编程代码,减少编程开发时间,提高工作效率。率。2 2、隐藏、隐藏SQLSQL细节,把细节,把SQLSQL繁琐的工作留给数据库开发人员,繁琐的工作留给数据库开发人员,而程序开发员则集中处理高级编程语言。而程序开发员则集中处理高级编程语言。3 3、维修集中化,可以在一个地方做业务上的逻辑修改,、维修集中化,可以在一个地方做业务上的逻辑修改,然后让这些修改自动应用到所有相关程序中。然后让这些修改自动应用到所有相关程序中。4 4、可在另一个、可在另一个SQLSQL语句中直接调用。语句中直接调用。5 5、函数必须始终返回一个值
3、、函数必须始终返回一个值(一个标量值或一个表格一个标量值或一个表格)11/10/20222第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 200511.1 用户自定义函数概述用户自定义函数概述 除了使用系统提供的函数外,用户还可以根据需要自定除了使用系统提供的函数外,用户还可以根据需要自定义函数。用户自定义函数(义函数。用户自定义函数(User Defined FunctionsUser Defined Functions)是)是SQL SQL Server 2000Server 2000以后新增的数据库对象,是以后新增的数据库对象,是SQL Serve
4、rSQL Server的一大改的一大改进。进。用户自定义函数不能用于执行一系列改变数据库状态的用户自定义函数不能用于执行一系列改变数据库状态的操作,但它可以像系统函数一样在查询或存储过程等的程序操作,但它可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过段中使用,也可以像存储过程一样通过EXECUTE命令来执命令来执行。用户自定义函数中存储了一个行。用户自定义函数中存储了一个Transact-SQL例程,可以例程,可以返回一定的值返回一定的值。11/10/20223第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 可使用
5、可使用CREATE FUNCTIONCREATE FUNCTION语句创建、使用语句创建、使用ALTER ALTER FUNCTIONFUNCTION语句修改、以及使用语句修改、以及使用DROP FUNCTIONDROP FUNCTION语句除语句除去用户定义函数。每个完全合法的用户定义函数名必去用户定义函数。每个完全合法的用户定义函数名必须唯一。须唯一。必须被授予必须被授予CREATE FUNCTION权限才能创建、权限才能创建、修改或除去用户定义函数。不是所有者的用户在修改或除去用户定义函数。不是所有者的用户在Transact-SQL语句中使用某个函数之前,必须先给此语句中使用某个函数之前
6、,必须先给此用户授予该函数的适当权限。若要创建或更改在用户授予该函数的适当权限。若要创建或更改在CHECK约束、约束、DEFAULT子句或计算列定义中引用子句或计算列定义中引用用户定义函数的表,还必须具有函数的用户定义函数的表,还必须具有函数的REFERENCES权限。权限。11/10/20224第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 在在SQL Server 2000中根据函数返回值形式的不同中根据函数返回值形式的不同将用户自定义函数分为三种类型:将用户自定义函数分为三种类型:l标量型函数(标量型函数(Scalar functions
7、)l内嵌表值型函数(内嵌表值型函数(Inline table-valued functions)l多语句表值型函数(多语句表值型函数(Multi-statement table-valued functions)。)。11/10/20225第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 标量型函数(标量型函数(Scalar functionsScalar functions)标量型函数返回在标量型函数返回在RETURNSRETURNS子句中定义的类型的子句中定义的类型的单个数据值。可以使用所有标量数据类型,包括单个数据值。可以使用所有标量数据类
8、型,包括bigintbigint和和sql_variantsql_variant。不支持不支持timestamptimestamp数据类型、数据类型、用户定义数据类型和非标量类型(如用户定义数据类型和非标量类型(如tabletable或或cursorcursor)。在)。在BEGIN.ENDBEGIN.END块中定义的函数主体包块中定义的函数主体包含返回该值的含返回该值的 Transact-SQLTransact-SQL语句系列。返回类型语句系列。返回类型可以是除可以是除texttext、ntextntext、imageimage、cursorcursor、timestamptimestamp
9、和和table table 之外的任何数据类型。之外的任何数据类型。11/10/20226第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 内嵌表值型函数(内嵌表值型函数(Inline table-valued functions)内嵌表值型函数以表的形式返回一个返回值,内嵌表值型函数以表的形式返回一个返回值,即它返回的是一个表。内嵌表值型函数没有由即它返回的是一个表。内嵌表值型函数没有由BEGIN-END语句括起来的函数体。其返回的表语句括起来的函数体。其返回的表由一个位于由一个位于RETURN子句中的子句中的SELECT命令段从命令段从数据库
10、中筛选出来。内联表值型函数功能相当于数据库中筛选出来。内联表值型函数功能相当于一个参数化的视图。一个参数化的视图。11/10/20227第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005多语句表值型函数(Multi-statement table-valued functions)多语句表值型函数可以看作标量型和内嵌表值型函数的结合多语句表值型函数可以看作标量型和内嵌表值型函数的结合体。它的返回值是一个表,但它和标量型函数一样有一个用体。它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-ENDBEGIN-END语句括起来的函数体,返回值的
11、表中的数据是由函数语句括起来的函数体,返回值的表中的数据是由函数体中的语句插入的。由此可见,它可以进行多次查询,对数据进体中的语句插入的。由此可见,它可以进行多次查询,对数据进行多次筛选与合并,弥补了内嵌表值型函数的不足。行多次筛选与合并,弥补了内嵌表值型函数的不足。用户定义函数采用零个或更多的输入参数并返回标量值或用户定义函数采用零个或更多的输入参数并返回标量值或表。函数最多可以有表。函数最多可以有1024个输入参数。当函数的参数有默认值时,个输入参数。当函数的参数有默认值时,调用该函数时必须指定默认调用该函数时必须指定默认DEFAULT关键字才能获取默认值。关键字才能获取默认值。该行为不同
12、于在存储过程中含有默认值的参数,而在这些存储过该行为不同于在存储过程中含有默认值的参数,而在这些存储过程中省略该函数也意味着省略默认值。用户定义函数不支持输出程中省略该函数也意味着省略默认值。用户定义函数不支持输出参数。参数。11/10/20228第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005函数中的有效语句类型包括:函数中的有效语句类型包括:(1 1)DECLAREDECLARE语句,该语句可用于定义函数局部的数据变量和游标。语句,该语句可用于定义函数局部的数据变量和游标。(2 2)为函数局部对象赋值,如使用)为函数局部对象赋值,如使用SET
13、SET给标量和表局部变量赋值。给标量和表局部变量赋值。(3 3)游标操作,该操作引用在函数中声明、打开、关闭和释放的局)游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用部游标。不允许使用FETCHFETCH语句将数据返回到客户端。仅允许使语句将数据返回到客户端。仅允许使用用FETCHFETCH语句通过语句通过INTOINTO子句给局部变量赋值。子句给局部变量赋值。(4 4)控制流语句。)控制流语句。(5 5)SELECTSELECT语句,该语句包含带有表达式的选择列表,其中的表达语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。式将值赋予函数的局
14、部变量。(6 6)INSERTINSERT、UPDATEUPDATE和和DELETEDELETE语句,这些语句修改函数的局部语句,这些语句修改函数的局部tabletable变量。变量。(7 7)EXECUTEEXECUTE语句,该语句调用扩展存储过程。语句,该语句调用扩展存储过程。11/10/20229第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 200511.2 11.2 创建用户定义函数创建用户定义函数 创建标量型用户自定义函数(创建标量型用户自定义函数(Scalar functions):):CREATE FUNCTION owner_name.
15、function_name (parameter_name AS scalar_parameter_data_type =default ,.n )RETURNS scalar_return_data_type WITH ,.n AS BEGIN function_body RETURN scalar_expression END 11/10/202210第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 创建内嵌表值型函数创建内嵌表值型函数(Inline table-valued functions):):CREATE FUNCTION owne
16、r_name.function_name(parameter_name AS scalar_parameter_data_type =default ,.n )RETURNS TABLE WITH ,.n AS RETURN ()select-stmt 11/10/202211第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005创建多语句表值型函数创建多语句表值型函数(Multi-statement table-valued functions):):CREATE FUNCTION owner_name.function_name(parameter
17、_name AS scalar_parameter_data_type =default ,.n )RETURNS return_variable TABLE WITH ,.n AS BEGIN function_body RETURN END :=ENCRYPTION|SCHEMABINDING :=(column_definition|table_constraint ,.n )11/10/202212第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 参数说明:owner_nameowner_name:拥有该用户定义函数的用户拥有该用户定义函
18、数的用户IDID的名称。的名称。function_namefunction_name:用户定义函数的名称。用户定义函数的名称。函数名称必须符合标识符的规则,对其所函数名称必须符合标识符的规则,对其所有者来说,该名称在数据库中必须是唯一有者来说,该名称在数据库中必须是唯一的。的。11/10/202213第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 参数说明:parameter_name:用户定义函数的参数。用户定义函数的参数。CREATE FUNCTION语句中可以声明一个或多个参数。函数语句中可以声明一个或多个参数。函数最多可以有最多可以有1
19、 024个参数。函数执行时每个已声明参数的值必个参数。函数执行时每个已声明参数的值必须由用户指定,除非该参数的默认值已经定义。如果函数的参须由用户指定,除非该参数的默认值已经定义。如果函数的参数有默认值,在调用该函数时必须指定数有默认值,在调用该函数时必须指定“default”关键字才能关键字才能获得默认值。这种行为不同于存储过程中有默认值的参数,在获得默认值。这种行为不同于存储过程中有默认值的参数,在存储过程中省略参数也意味着使用默认值。使用存储过程中省略参数也意味着使用默认值。使用符号作为第符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。一个字符来指定参数名称。参数名称必须
20、符合标识符的规则。每个函数的参数仅用于该函数本身;相同的参数名称可以用在每个函数的参数仅用于该函数本身;相同的参数名称可以用在其它函数中。参数只能代替常量;而不能用于代替表名、列名其它函数中。参数只能代替常量;而不能用于代替表名、列名或其它数据库对象的名称。或其它数据库对象的名称。11/10/202214第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005scalar_parameter_data_typescalar_parameter_data_type:参数的数据类型。所有标参数的数据类型。所有标量数量数据类型(包括据类型(包括bigintbi
21、gint和和sql_variantsql_variant)都可用都可用作用户定义作用户定义函数的参数。不支持函数的参数。不支持timestamptimestamp数据类数据类型和用户定义数据类型和用户定义数据类型。不能指定非标量类型型。不能指定非标量类型(例如(例如cursorcursor和和tabletable)。)。scalar_return_data_type scalar_return_data_type:是标量用户定义函数的返回是标量用户定义函数的返回值。值。scalar_return_data_type scalar_return_data_type 可以是可以是 SQL SQL
22、Server Server 支持的任何支持的任何标量数据类型(标量数据类型(texttext、ntextntext、imageimage和和timestamptimestamp除外)。除外)。scalar_expressionscalar_expression:指定标量型函数返回的标量值。指定标量型函数返回的标量值。TABLETABLE:指定表值型函数的返回值为表。在内嵌表值型函指定表值型函数的返回值为表。在内嵌表值型函 数中,数中,通过单个通过单个SELECTSELECT语句定义语句定义TABLETABLE返回值。返回值。内嵌函数没有相关联内嵌函数没有相关联的返回变量。在多语句表值的返回变量
23、。在多语句表值型函数中,型函数中,return_variable return_variable 是是TABLETABLE变量,变量,用于存储和累积应作为函数值返回的行。用于存储和累积应作为函数值返回的行。参数说明:11/10/202215第第11章章 用户自定义函数用户自定义函数 大型数据库大型数据库 SQL Server 2005 function_bodyfunction_body:指定一系列指定一系列Transact-SQLTransact-SQL语句定义函数的值,语句定义函数的值,这些语句合在一起不会产生副作用。这些语句合在一起不会产生副作用。function_bodyfunctio
24、n_body只用于标量只用于标量型函数和多语句表值型函数。在标量型函数中,型函数和多语句表值型函数。在标量型函数中,function_bodyfunction_body是一是一系列合起来求得标量值的系列合起来求得标量值的Transact-SQLTransact-SQL语句。在多语句表值型函数语句。在多语句表值型函数中,中,function_bodyfunction_body是一系列填充表返回变量的是一系列填充表返回变量的Transact-SQLTransact-SQL语句。语句。select-stmtselect-stmt:是定义内嵌表值型函数返回值的单个是定义内嵌表值型函数返回值的单个SEL
25、ECTSELECT语句。语句。ENCRYPTIONENCRYPTION指出指出SQL ServerSQL Server加密包含加密包含CREATE FUNCTIONCREATE FUNCTION语句文本的语句文本的系统表列。使用系统表列。使用ENCRYPTIONENCRYPTION可以避免将函数作为可以避免将函数作为SQL ServerSQL Server复制的复制的一部分发布。一部分发布。SCHEMBINDINGSCHEMBINDING:指定将函数绑定到它所引用的数据库对象。如果指定将函数绑定到它所引用的数据库对象。如果函数是用函数是用SCHEMABINDINGSCHEMABINDING选项
展开阅读全文