数据库必知词汇:用户定义函数(UDF)

简介: 用户定义函数(UDF) 由一个或多个SQL语句组成的子程序,可用于封装代码以便重新使用。通常情况下不将用户限制在定义为SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。

用户定义函数(UDF) 由一个或多个SQL语句组成的子程序,可用于封装代码以便重新使用。通常情况下不将用户限制在定义为SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。

与编程语言中的函数类似,数据库中的用户定义函数是接受参数、执行操作(例如复杂计算)并将操作结果以值的形式返回的例程。返回值可以是单个标量值或结果集。

用户定义函数可使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句除去用户定义函数。每个完全合法的用户定义函数名 (database_name.owner_name.function_name) 必须唯一。此外,必须被授予 CREATE FUNCTION 权限才能创建、修改或除去用户定义函数。不是所有者的用户在 Transact-SQL 语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK 约束、DEFAULT 子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES 权限。

UDF的优点:

  • 允许模块化程序设计:只需创建一次函数并将其存储在数据库中,以后便可以在程序中调用任意次。 用户定义函数可以独立于程序源代码进行修改。
  • 执行速度更快:与存储过程相似,用户定义函数通过缓存计划并在重复执行时重用它来降低SQL代码的编译开销。 这意味着每次使用用户定义函数时均无需重新解析和重新优化,从而缩短了执行时间。和用于计算任务、字符串操作和业务逻辑的SQL 函数相比,CLR 函数具有显著的性能优势。SQL 函数更适用于数据访问密集型逻辑。
  • 减少网络流量:基于某种无法用单一标量的表达式表示的复杂约束来过滤数据的操作,可以表示为函数。然后,此函数便可以在 WHERE 子句中调用,以减少发送至客户端的数字或行数。

函数中的有效语句的类型包括:

  • DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
  • 为函数局部对象的赋值,如使用 SET 为标量和表局部变量赋值。
  • 游标操作,该操作引用在函数中声明、打开、关闭和释放的局部游标。 不允许使用 FETCH 语句将数据返回到客户端。 仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
  • TRY...CATCH 语句以外的控制流语句。
  • SELECT 语句,该语句包含具有为函数的局部变量赋值的表达式的选择列表。
  • UPDATE、INSERT 和 DELETE 语句,这些语句修改函数的局部表变量。
  • EXECUTE 语句,该语句调用扩展存储过程。

资料来源:
用户定义函数 https://docs.microsoft.com/zh-cn/sql/relational-databases/user-defined-functions/user-defined-functions?view=sql-server-ver15
函数类型 https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms177499(v=sql.105)?redirectedfrom=MSDN

相关文章
|
28天前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
28天前
|
SQL 测试技术 数据库
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
4月前
|
存储 SQL 监控
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
49 2
|
4月前
|
SQL 数据处理 数据库
|
4月前
|
SQL 数据处理 数据库
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
502 0
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之DBStack的定义如何解决
云原生数据库2.0问题之DBStack的定义如何解决
|
5月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
存储 JSON 数据库
项目管理定义问题之什么是序列化大对象的值对象数据库形态
项目管理定义问题之什么是序列化大对象的值对象数据库形态