自定义函数(UDF)

DB2 Universal Database(DB2 UDB)用户定义函数(user-defined functions,UDF)允许您添加自己的函数定义,从而扩展 DB2 的内置函数。有了这些用户定义函数,就可以通过编写自己的用于事务、计算等方面的函数来定制 DB2,以满足业务需求。

UDF 鼓励代码重用,这样可以提高应用程序开发人员的生产率。如果您有很多实现相同逻辑的程序,那么可以通过 UDF 标准化该逻辑,并让所有这些程序使用相同的实现。一旦在 DB2 中定义好一个 UDF,便可以像使用内置 DB2 函数那样,在 SQL 语句中使用这个 UDF。如果是在应用程序中编写这个函数,而不是将其定义为 UDF,那么 SQL 查询工具(例如 CLP)的用户将不能访问这个函数。UDF 允许任何前端,包括 Java™ 程序,访问这个标准逻辑。

直接从数据库引擎(而不是从应用程序代码)中调用 UDF 还可以使性能获得极大的提高,尤其是在将数据发送回应用程序进行进一步处理之前,可以使用 UDF 来过滤数据。

由于UDF是预先编译的,性能普遍优于一般的查询,UDF使用的存取计划一经编译就会相对稳定。我在开发中曾多次发现,使用UDF 代替查询或视图中的复杂部分会提高几倍甚至几十倍的性能,主要原因是迫使DB2使用指定的存取计划来充分利用index或者调整其访问过程(如Join 顺序、Filter位置等)。使用UDF 进行优化的基本思路是:将复杂查询分解为多个部分执行,针对每个部分优化处理,将各部分组合时能够避免存取计划的一些不必要变化,优化整体性能。

注意:函数只能包含那些不会改变数据库状态的语句(诸如INSERT、UPDATE或DELETE语句是不允许的)。并且只允许完整SQL PL语言的子集出现在SQL函数中(不能是CALL语句、游标和条件处理)。

自定义函数语法

CREATE FUNCTION 函数名(传入参数名 datatype, ……)

RETURNS datatype –返回值类型

BEGIN ATOMIC

函数体

END

例子

create function ADD(a int ,b int)
returns
int
LANGUAGE SQL
BEGIN ATOMIC
          DECLARE
sum int default 0;
          set
sum = a + b;
          return
sum;    
END
 

DB2函数不支持INSERT、UPDATE或DELETE语句和临时表游标,而且返回的结果只能有一个

你可能感兴趣的:(sql,db2)