WEB开发网
开发学院数据库DB2 DB2 9.5 SQL Procedure Developer 认证考试 735 准... 阅读

DB2 9.5 SQL Procedure Developer 认证考试 735 准备,第3部分

 2010-02-18 15:01:14 来源:WEB开发网   
核心提示:<SCRATCHPAD <[100 | [SPSize]]> | NO SCRATCHPAD>子句指定是否为UDF 分配作为持久存储区域的内存(SCRATCHPAD表示分配,NO SCRATCHPAD表示不分配),DB2 9.5 SQL Procedure Developer 认证考试 735

<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

上一页  1 2 3 4 5 6 7 8 9 10 11  下一页

Tags:DB SQL Procedure

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接