DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第3部分
2010-02-18 15:01:14 来源:WEB开发网<SCRATCHPAD <[100 | [SPSize]]> | NO SCRATCHPAD>子句指定是否为UDF 分配作为持久存储区域的内存(SCRATCHPAD表示分配,NO SCRATCHPAD表示不分配)。如果指定了 SCRATCHPAD子句,DB2 就会在首次调用此函数时分配适当数量的内存。在创建和填充暂存区域之后,会在各次函数调用之间保留它的内容 —— UDF 在一次调用中对暂存区域所做的任何修改都会保留到下一次调用。
<DBINFO | NO DBINFO>子句表示在调用函数时是否把 DB2 掌握的信息作为额外参数传递给 UDF(DBINFO表示传递,NO DBINFO表示不传递)。如果指定了 DBINFO子句,那么DB2会传递一个数据结构,其中包含的信息包括当前连接的数据库的名称、应用程序运行时授权 ID、调用此函数的数据库服务器的版本、发布版本和修订级别以及服务器使用的操作系统。
因此,如果希望注册一个名为CENTER()的外部标量函数,它接受两个值(一个INTEGER值和一个DOUBLE值)并返回一个DOUBLE值,它存储在/home/db2inst1/myfuncs 目录中的“double” 库中,那么可以执行下面的CREATE FUNCTION语句:
清单 5.外部标量函数
CREATE FUNCTION center(INT, DOUBLE)
RETURNS DOUBLE
EXTERNAL NAME '/home/db2inst1/myfuncs/double'
LANGUAGE C
PARAMETER STYLE SQL
DETERMINISTIC
NO SQL
外部表函数
与外部标量函数一样,外部表函数是用高级编程语言编写的。外部标量函数返回一个标量值,而外部表函数在每次调用时返回一个数据集。外部表函数的强大之处在于,它们能够让几乎任何数据源看起来像是DB2 基表。另外,在联结操作、分组操作、集操作(例如UNION)和能够应用于只读视图的任何其他操作中,都可以使用外部表函数返回的数据集。
用来注册外部表函数的CREATE FUNCTION语句形式的基本语法如下:
清单 6. 用来注册外部表函数的CREATE FUNCTION语句
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>
其中:
FunctionName指定要创建的外部表函数的名称。
ParameterName指定一个或多个函数参数的名称。
InputDataType指定ParameterName 所识别的参数所需的数据类型。
ColumnName指定函数返回的一列或多列的名称。
ColumnDataType指定ColumnName 所识??的列返回的数据类型。
SpecificName指定分配给这个UDF的特定名称。这个名称可以用来引用或删除函数;但是,不能用来调用函数。
ExternalName指定包含要注册的外部函数的可执行代码的库和函数。
Identifier指定包含要注册的外部函数的可执行代码的库,但是这只适用于用C或C++ 编写的函数。DB2 Database Manager会寻找与库同名的函数。
SPSize指定用作scratchpad 区域的内存量(以字节为单位)。
因此,如果希望注册一个名为EMPDATA()的外部表函数,它接受两个长度可变的字符串值,返回一个包含职员信息的数据集(信息取自一个ASCII 文件),它存储在/home/db2inst1/myfuncs 目录中的“EMPDATA” 库中,那么可以执行下面的CREATE FUNCTION语句:
清单 7.外部表函数
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
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接