DB2数据库中创建定义函数



我们可以创建用户定义函数来扩展内置的 DB2 函数。例如,创建计算复杂的算术表达式或操作字符串的函数,然后在 SQL 语句中像对待任何现有的内置函数一样引用这些函数。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!


本文将为您详细介绍DB2数据库中创建用户自定义行数,用以扩展扩展内置的 DB2 函数的方法,供您参考,希望对您有所帮助。

可以创建用户定义函数来扩展内置的 DB2 函数。例如,创建计算复杂的算术表达式或操作字符串的函数,然后在 SQL 语句中像对待任何现有的内置函数一样引用这些函数。

假设需要一个返回圆的面积的函数,这个函数的输入参数是圆的半径。内置的 DB2 函数中没有这样的函数,但是可以创建一个用户定义的 SQL 标量函数 来执行这个任务,可以在 SQL 语句中支持标量函数的任何地方引用这个函数。 CREATE function ca (r DOUBLE)

RETURNS DOUBLE
             LANGUAGE SQL
             CONTAINS SQL
             NO EXTERNAL ACTION
             DETERMINISTIC
             RETURN 3.14159 * (r * r);


             
NO EXTERNAL ACTION 子句指出这个函数不会对数据库管理程序不管理的对象的状态有任何影响。DETERMINISTIC 关键字指出这个函数对于给定的参数值总是返回相同的结果。在查询优化期间会使用这个信息。执行这个函数的简便方法是在一个查询中引用它。在下面的示例中,针对 SYSIBM.SYSDUMMY1 编目视图(其中只有一行)执行这个查询(可以选择任意的查询目标): db2 SELECT ca(96.8) AS area FROM sysibm.sysdummy1

AREA
             ------------------------
             +2.94374522816000E+004
             1 record(s) selected.


             
还可以创建用户定义的表函数,它接受零个或更多的输入参数并以表的形式返回数据。表函数只能用在 SQL 语句的 FROM 子句中。

假设需要一个返回拥有特定工作的所有职员的姓名和职员号的函数,函数的参数是这个工作的头衔。下面是执行这个任务的表函数示例: CREATE FUNCTION

jobemployees (job VARCHAR(8))
             RETURNS TABLE (
             empno CHAR(6),
             firstname VARCHAR(12),
             lastname VARCHAR(15)
             )
             LANGUAGE SQL
             READS SQL DATA
             NO EXTERNAL ACTION
             DETERMINISTIC
             RETURN
             SELECT empno, firstnme, lastname
             FROM employee
             WHERE employee.job = jobemployees.job;


             
以下查询在 FROM 子句中引用这个新的表函数,并传递工作头衔 ‘CLERK’ 作为函数的参数。语法要求用关键字 AS 引入一个相关名称: db2 SELECT * FROM

TABLE(jobemployees('CLERK')) AS clerk
             EMPNO  FIRSTNAME    LASTNAME
             ------ ------------ ---------------
             000120 SEAN         O'CONNELL
             000230 JAMES        JEFFERSON
             000240 SALVATORE    MARINO
             000250 DANIEL       SMITH
             000260 SYBIL        JOHNSON
             000270 MARIA        PEREZ
             6 record(s) selected.