使用用户定义的函数
在编写 SQL 应用程序时,可以将某些操作或操作作为用户定义的函数 (UDF) 或作为应用程序中的子例程来实现。 虽然似乎更容易将新操作作为子例程实现,但您可能希望考虑改为使用 UDF 的优点。
例如,如果新操作是其他用户或程序可以利用的操作,那么 UDF 可帮助复用该操作。 此外,可以在 SQL 中直接调用函数,只要可以使用表达式。 数据库会自动处理函数自变量的许多数据类型提升。 例如,将 DECIMAL 设置为 DOUBLE 时,数据库允许将您的函数应用于不同的但兼容的数据类型。
在某些情况下,直接从数据库引擎而不是从应用程序调用 UDF 可能具有相当大的性能优势。 在函数可能用于限定数据以进行进一步处理的情况下,您将注意到此优势。 在行选择处理中使用该函数时,会发生这些情况。
请考虑要处理某些数据的简单方案。 您可以满足一些可表示为函数 SELECTION_CRITERIA()的选择标准。 应用程序可以发出以下 SELECT 语句:
SELECT A, B, C FROM T
当它接收到每一行时,它会针对数据运行程序的 SELECTION_CRITERIA 函数,以决定它是否有兴趣进一步处理数据。 在这里,表 T 的每一行都必须传递回应用程序。 但是,如果 SELECTION_CRITERIA() 作为 UDF 实现,那么应用程序可以发出以下语句:
SELECT C FROM T WHERE SELECTION_CRITERIA(A,B)=1
在这种情况下,只会通过应用程序与数据库之间的接口传递感兴趣的行和一列。
UDF 可以提供性能优势的另一种情况是在处理大对象 (LOB) 时。 假设您有一个从 LOB 值中抽取一些信息的函数。 您可以在数据库服务器上执行此抽取,并仅将抽取的值传递回应用程序。 这比将整个 LOB 值传递回应用程序然后执行抽取更有效。 根据特定情况,将此函数打包为 UDF 的性能值可能非常大。