函数解析 (function resolution)
在调用函数后, Db2 必须确定要执行哪个函数。 这个过程称为函数解析 ,适用于内置函数和用户自定义函数。
函数通过其函数名来调用,函数名隐式或显式地由模式名限定,后面用括号括住函数的参数。 在数据库中,每个函数都由其函数签名唯一标识,函数签名包括函数架构名称、函数名称、参数数量和参数的数据类型。 一个架构可以包含多个同名函数,但每个函数的参数数量或参数数据类型可能不同。 此外,具有相同名称、参数数量和参数类型的函数可以在多个模式中存在。

- 函数过载
- 在同一个架构中,具有相同参数数量的多个函数实例的函数名称称为重载函数。
- 覆盖功能
- 函数可以在SQL路径的各个模式中重写 ,在这种情况下,SQL路径的不同模式中会有多个同名且参数数量相同的函数。 这些功能不一定具有不同的参数数据类型。

- Db2 根据被调用函数的限定名称、非限定名称和指定的参数数量确定候选函数集。
- Db2 根据所调用函数的参数数据类型与候选函数集中的函数参数数据类型进行比较,从候选函数集中确定最合适的函数。
对于使用限定或非限定函数名调用的函数,函数解析是相似的,但使用非限定名称时, Db2 需要搜索多个模式。
为了提高函数解析的性能,并防止在添加新功能时出现潜在问题,请考虑使用完全限定名称(包括架构名称)来调用用户定义的函数。
对于传递转换表的函数调用,转换表中每列的数据类型、长度、精度和比例必须与函数定义中命名的表的每列的数据类型、长度、精度和比例完全匹配。
用户自定义函数的创建时间戳必须早于包含函数调用的计划或包的显式绑定时间戳。 在自动绑定期间,如果用于明确绑定软件包或计划的 Db2 版本晚于 Db2 版本,则不会考虑使用 版本中引入的内置功能进行功能解析。
在CREATE VIEW语句中,函数解析在创建视图时发生。 如果随后创建了另一个同名的函数,视图不会受到影响,即使新函数比创建视图时选择的函数更合适。
- 合格的功能解析度
- 当使用模式名称和函数名称调用函数时, Db2 仅搜索指定的模式以确定要执行的函数。Db2 根据以下标准选择候选函数:
- 函数实例的名称必须与函数调用中的名称一致。
- 函数实例中的输入参数数量必须与函数调用中的参数数量一致。
- 语句的授权ID必须具有函数实例的EXECUTE权限。
如果没有函数满足这些条件,则返回错误。 如果架构中存在一个或多个候选函数,则处理这一组候选函数,以找到最合适的函数。
对于包含无类型参数标记的函数调用,这些参数标记的数据类型被视为与函数实例中的参数数据类型匹配或可提升为该数据类型。
- 无限制的功能解析
- 当调用不带限定符的函数时, Db2 会在SQL路径中搜索模式列表,以确定要执行的函数实例。 对于SQL路径中的每个模式, Db2 都会根据以下标准在模式中搜索候选函数:
- 函数实例的名称必须与函数调用中的名称一致。
- 函数实例中的输入参数数量必须与函数调用中的函数参数数量一致。
- 语句的授权ID必须具有函数实例的EXECUTE权限。
: 如果 Db2 未找到任何候选函数,则返回错误。
如果没有函数满足这些条件,则返回错误。 如果架构中存在一个或多个候选函数,则处理这一组候选函数,以找到最合适的函数。
对于包含无类型参数标记的函数调用,这些参数标记的数据类型被视为与函数实例中的参数数据类型匹配或可提升为该数据类型。