1、内置函数分类(SYSIBM模式内)

1)标量函数:返回一个标量值的函数;

2)聚合函数:也叫列函数,也返回一个标量值,这个值是一组输入值的计算结果;
3)表函数:向引用它的 SQL 语句返回一个表;

4)行函数:返回单一表行;

2、用户定义的函数

1)有源(或模板)函数:有源函数是从一个已经向数据库注册的函数(称为源函数)构造出的 UDF。有源函数在本质上可以是标量、列或表函数,还可以用它们覆盖 +、-、* 和 / 等操作符。

--语法

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
    RETURNS [OutputDataType]
    <SPECIFIC [SpecificName]>
    SOURCE [SourceFunction] <([DataType] ,...)>
    <AS TEMPLATE>

--示例

CREATE FUNCTION AVG(YEAR) RETURNS YEAR
    SOURCE SYSIBM.AVG(INTEGER)

2)SQL 标量、表或行函数:SQL 函数是只使用过程式 SQL 语句构造的 UDF。

--语法

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
    RETURNS [[OutputDataType] |
       TABLE ( [ColumnName] [ColumnDataType] ,... ) |
       ROW ( [ColumnName] [ColumnDataType] ,... )]
    <SPECIFIC [SpecificName]>
    <LANGUAGE SQL>
    <DETERMINISTIC | NOT DETERMINISTIC>
    <EXTERNAL ACTION | NO EXTERNAL ACTION>
    <CONTAINS SQL | READS SQL DATA | MODIFIES SQL DATA>     
    <STATIC DISPATCH>     
    <CALLED ON NULL INPUT>        
    [SQLStatements] | RETURN [ReturnStatement]

--示例

CREATE FUNCTION julian_date(in_date DATE)
    RETURNS CHAR(7)
    LANGUAGE SQL
    RETURN RTRIM(CHAR(YEAR(in_date))) ||
      SUBSTR(DIGITS(DAYOFYEAR(in_date)), 8)

3)外部标量函数:外部标量函数是用 C、C++ 或 Java™ 等高级编程语言编写的返回单一值的函数。

--创建外部函数的步骤

i)使用支持的高级编程语言编写 UDF 体。

ii)编译 UDF。

iii)链接 UDF 以创建库(或动态链接库)。

iv)调试 UDF 并重复第 2 到第 4 步,直到解决所有问题。

v)把包含 UDF 的库存储在服务器工作站上。另外,必须修改包含 UDF 的库文件的系统权限,让所有用户都可以执行它。例如,在 UNIX 环境中,使用chmod 命令让一个 文件可由所有用户执行;在 Windows 环境中,使用attrib 完成此任务。

vi)使用适当形式的 CREATE FUNCTION SQL 语句向 DB2 数据库注册 UDF。

--语法

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
    RETURNS [OutputDataType]
    <SPECIFIC [SpecificName]>
    EXTERNAL <NAME [ExternalName] | [Identifier]>    
    LANGUAGE [C | JAVA | CLR | OLE]
    PARAMETER STYLE [DB2GENERAL | JAVA | SQL] 
    <DETERMINISTIC | NOT DETERMINISTIC>
    <FENCED | NOT FENCED>
    <RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT> 
    <NO SQL | CONTAINS SQL | READS SQL DATA>     
    <STATIC DISPATCH>     
    <EXTERNAL ACTION | NO EXTERNAL ACTION>
    <SCRATCHPAD <[100 | [SPSize]]> | NO SCRATCHPAD>    
    <DBINFO | NO DBINFO>    
--示例

CREATE FUNCTION center(INT, DOUBLE)
    RETURNS DOUBLE
    EXTERNAL NAME '/home/db2inst1/myfuncs/double'
    LANGUAGE C
    PARAMETER STYLE SQL
    DETERMINISTIC
    NO SQL

4)外部表函数:与外部标量函数一样,外部表函数是用高级编程语言编写的。外部标量函数返回一个标量值,而外部表函数在每次调用时返回一个数据集。外部表函数的强大之处在于,它们能够让几乎任何数据源看起来像是 DB2 基表。

--语法

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
    RETURNS TABLE ( [ColumnName] [ColumnDataType] ,... ) 
    <SPECIFIC [SpecificName]>
    EXTERNAL <NAME [ExternalName] | [Identifier]>    
    LANGUAGE [C | JAVA | CLR | OLE]
    PARAMETER STYLE [DB2GENERAL | SQL] 
    <DETERMINISTIC | NOT DETERMINISTIC>
    <FENCED | NOT FENCED>
    <RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT> 
    <NO SQL | CONTAINS SQL | READS SQL DATA>     
    <STATIC DISPATCH>     
    <EXTERNAL ACTION | NO EXTERNAL ACTION>
    <SCRATCHPAD <[100 | [SPSize]]> | NO SCRATCHPAD>    
    <DBINFO | NO DBINFO>   
--示例

CREATE FUNCTION empdata (VARCHAR(30), VARCHAR(255))
    RETURNS TABLE (empid INT, lname CHAR(20), fname CHAR(20))
    EXTERNAL NAME '/home/db2inst1/myfuncs/EMPDATA'
    LANGUAGE C
    PARAMETER STYLE SQL
    DETERMINISTIC
    NOT FENCED    
    NO SQL
    NO EXTERNAL ACTION

5)OLE DB 外部表函数:Microsoft OLE DB 是一组应用程序编程接口 (API),用于访问各种数据源。数据源由数据本身、相关联的数据库管理系统 (DBMS)、运行 DBMS 的平台以及用来访问此平台的网络组成。OLE DB 可以为 OLE Component Object Model (COM) 环境中的所有数据源类型提供访问。

--语法

CREATE FUNCTION [FunctionName] ( <<[ParameterName]> [InputDataType] ,...> )
    RETURNS TABLE ( [ColumnName] [ColumnDataType] ,... ) 
    <SPECIFIC [SpecificName]>
    EXTERNAL <NAME [ExternalName]>    
    LANGUAGE OLEDB
    <DETERMINISTIC | NOT DETERMINISTIC>
    <RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT>   
    <EXTERNAL ACTION | NO EXTERNAL ACTION>
    <CARDINALITY [NumRows]>    
--示例

CREATE FUNCTION orders()
    RETURNS TABLE (orderid      INTEGER,
                   customerid   CHAR(5),
                   employeeid   INTEGER,
                   orderdate    TIMESTAMP,
                   requiredate  TIMESTAMP,
                   shipdate     TIMESTAMP,
                   shipcharges  DECIMAL(19,4))
    LANGUAGE OLEDB
    EXTERNAL NAME '!orders!Provider=Microsoft.Jet.OLEDB.3.51;
        Data Source=c:\sqllib\samples\oledb\nwind.mdb'

3、SQL函数的结构

1)组成部分

i)函数名

ii)一系列参数声明(如果有参数的话)

iii)函数返回值的声明

iv)一个或多个函数选项

v)函数体

2)结构示意图

3)SQL函数中可以使用的SQL语句

SQL 语句 CONTAINS SQL READS SQL DATA MODIFIES SQL DATA
CALL Yes Yes Yes
DELETE No No Yes
FOR Yes Yes Yes
GET DIAGNOSTICS Yes Yes Yes
IF Yes Yes Yes
INSERT No No Yes
ITERATE Yes Yes Yes
LEAVE Yes Yes Yes
MERGE No No Yes
SELECT No Yes Yes
SET variable Yes Yes Yes
SIGNAL Yes Yes Yes
VALUES No Yes Yes
WHILE Yes Yes Yes

4)单语句 SQL 标量函数

--无参数单语句SQL标量函数

--有参数单语句SQL标量函数

 
5)单语句 SQL 表函数

--无参数单语句SQL表函数

--有参数单语句SQL表函数


6)复合语句 SQL 标量函数

--无参数复合语句SQL标量函数


--有参数复合语句SQL标量函数

 
7)复合语句 SQL 表函数

--没参数复合语句SQL表函数


--有参数复合语句SQL表函数

8)SQL Procedural Language (SQL PL) 语句

--与变量相关的语句

i)DECLARE [Variable] DEFAULT [Value]

ii)DECLARE [Condition]

iii)SET (assignment-statement)

--条件语句

i)IF

--循环语句

i)FOR

ii)WHILE

--控制转移语句

i)CALL

ii)ITERATE

iii)LEAVE

iiii)RETURN

--错误管理语句

i)SIGNAL

ii)示例(包含SQL PL语句的SQL标量函数)

9)SQL 函数中的错误处理

--语法

SIGNAL [Condition_Value] 
    SET MESSAGE_TEXT = [Message]      

SIGNAL SQLSTATE <VALUE> [SQLSTATE_Value] 
    SET MESSAGE_TEXT = [Message]

--示例(包含流控制语句的SQL标量函数)

4、调用 SQL 函数

VALUES sqlfunc.strip_ltblanks(' This is a test. '),

SELECT * FROM TABLE(sqlfunc.bday_this_month('A00'))

DB2开发系列之三——SQL函数的更多相关文章

  1. Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程

    原文:Red Gate系列之三 SQL Server 开发利器 SQL Prompt 5.3.4.1 Edition T-SQL智能感知分析器 完全破解+使用教程 Red Gate系列之三 SQL S ...

  2. 高仿QQ即时聊天软件开发系列之三登录窗口用户选择下拉框

    上一篇高仿QQ即时聊天软件开发系列之二登录窗口界面写了一个大概的布局和原理 这一篇详细说下拉框的实现原理 先上最终效果图 一开始其实只是想给下拉框加一个placeholder效果,让下拉框在未选择未输 ...

  3. DB2开发系列之二——SQL过程

    1.SQL 过程的结构 1)SQL过程的结构 CREATE PROCEDURE proc_name   IN, OUT, INOUT parameters   optional clauses   S ...

  4. android开发系列之回调函数

    想必对于回调函数大家肯定不陌生,因为这是我们开发里面常用的代码技巧.我也就不废话了,让我们直接来看代码吧! public class TestCallback { public interface I ...

  5. DB2开发系列之一——基本语法

    最近看了些db2开发方面的资料,现做摘要,以供自己和大家参考: 1.变量声明 DECLARE v_salary DEC(9,2) DEFAULT 0.0; DECLARE v_status char( ...

  6. Chrome浏览器扩展开发系列之三:Google Chrome浏览器扩展的架构

    1) 不可视的background页面 Google Chrome扩展往往包含一个不可见的background页面,Google Chrome扩展的主要业务逻辑都位于此.有两种类型的backgroun ...

  7. DB2开发系列之四——触发器

    1.触发器类型 1)BEFORE 触发器:在对表插入或更新之前执行该触发器,允许使用CALL 和 SIGNAL SQL 语句: 2)BEFORE DELETE 触发器:在删除操作之前执行该触发器: 3 ...

  8. SuperMap iObject入门开发系列之三管线系统标注

    本文是一位好友“托马斯”授权给我来发表的,介绍都是他的研究成果,在此,非常感谢. 管线系统会涉及到一些坐标标注,属性标注,提供给用户查询获取其需要的信息,这期的文章介绍的是基于超图iObject开发的 ...

  9. C++开发系列-纯虚函数和抽象类

    概念 纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都实现该函数. 纯虚函数为各派生类提供了一个公共界面(接口的封装和设计.软件的模块功能的划分) 纯虚函数说明 ...

随机推荐

  1. html标签自带样式总结

    一.html标签自带样式 head { display:none; } body { margin:8px; line-height:1.12; } button, textarea, input, ...

  2. freemarker之include指令(九)

    freemarker之include指令 1.父页面ftl <html> <head> <meta http-equiv="content-type" ...

  3. hive查询结果输出到hdfs上

    insert overwrite directory "/mapredOutput/UserYesterdayInterest/${hiveconf:day}"row format ...

  4. java中垃圾回收机制和引用类型

    在java中JDK1.2版本以后,对象的引用类型分为四种,从高到低依次为:强引用.软引用.弱引用.虚引用. ①强引用的特点:垃圾回收机制绝不会回收它,即使内存不足时,JVM宁愿抛出OutOfMemor ...

  5. 【洛谷1640】[SCOI2010]连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  6. [Luogu3345][ZJOI2015]幻想乡战略游戏

    Luogu 题意: 动态维护带权重心. sol 这是一道写起来很舒服的动态点分治.(不像某些毒瘤题) 我们考虑,如果你选择的补给点不是当前的带权重心,那么带权重心就在补给点的一个子树中(你把补给点当做 ...

  7. POJ1743:Musical Theme

    题目 vjudge Sol 先差分 然后求不可重叠最长重复子串 bits/stdc++.h会CE # include <bits/stdc++.h> # define IL inline ...

  8. Django的models实现分析

    1      引子 1.1     神奇的Django中的models 我们先来看一段在Django项目中常用的代码: 设置数据库models代码: class Students(models.Mod ...

  9. oracle 12c 安装指南(各种问题总结)

    下一学期要学习数据库的知识,趁着敲代码之余,安装著名的oracle来放松一下 1.首先从官网下载安装包http://www.oracle.com/technetwork/database/enterp ...

  10. autobase之配置文件

    配置文件内容: 1.db_info{},数据库链接属性,包括Oracle,dmdb,快立方 2.credit etc目录的路径 3.批量基础数据导入sql路径 4.用例执行日志存储目录路径 功能: 1 ...